[英]Pandas read_csv
这是我的代码:
import os
import pandas as pd
path = os.getcwd()
files = os.listdir(path)
df = pd.DataFrame()
for f in files:
data = pd.read_csv(f, usecols = ['A','B','C','D','E'])
df = df.append(data)
我得到了追溯:
File "C:\Users\dbhadra\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\parsers.py", line 1134, in _validate_usecols_names
"columns expected but not found: {missing}".format(missing=missing)
ValueError: Usecols do not match columns, columns expected but not found: ['B', 'A', 'C', 'E', 'D']
我之前对read_excel
使用了类似的命令,并且它可以正常工作。 我是否需要包含sep/engine
参数? 我不明白为什么。 另外,我可以像在read_excel中一样使用usecol = 'A:E'
吗? csv文件非常有用。 没有技巧
在Excel中,您具有主列命名(AZ,AA-ZZ ...)。 在CSV中,您还没有。 usecols
是根据列标题(在第一行中)的列表。 如果CSV文件中没有标题,则只需删除usecols
,以后可以删除这些列。 或者,您可以将列指定为整数(例如usecols=(1, 3, 7)
而不是usecols=(A, C, F)
。如果有标题,请在usecols
写入其名称。
usecols : list-like or callable, optional
返回列的子集。 如果是类列表,则所有元素必须是位置(即文档列中的整数索引)或字符串,这些字符串与用户提供的名称或从文档标题行推断出的列名称相对应。 例如,有效的类似列表的usecols参数将为
[0, 1, 2]
或['foo', 'bar', 'baz']
。 元素顺序被忽略,因此usecols=[0, 1]
与[1, 0]
。 实例化从与元件为了保存使用数据的数据帧pd.read_csv(data, usecols=['foo', 'bar'])[['foo', 'bar']]
对于列['foo', 'bar']
顺序或pd.read_csv(data, usecols=['foo', 'bar'])[['bar', 'foo']]
表示['bar', 'foo']
顺序。如果是可调用的,则将针对列名称评估可调用函数,并在可调用函数计算结果为True的情况下返回名称。 有效的可调用参数的示例为
['AAA', 'BBB', 'DDD']
lambda x: x.upper()
。 使用此参数可以大大加快解析时间并降低内存使用量。
比较pandas.read_csv和pandas.read_excel的文档
对于read_csv()
:
secols:类似列表或可调用的列表,可选
返回列的子集。 如果是类列表,则所有元素必须是位置(即文档列中的整数索引)或字符串,这些字符串与用户提供的名称或从文档标题行推断出的列名称相对应。 例如,有效的类似列表的usecols参数将为[0,1,2]或['foo','bar','baz']
和为read_excel()
usecols:int,str,类似列表的或可调用的默认值None
返回列的子集。 *如果为None,则解析所有列。 *如果为int,则表示要解析的最后一列。
从版本0.24.0开始不推荐使用:传递int列表,而不是从0传递给usecols(包括)。
如果为str,则表示Excel列字母和列范围的逗号分隔列表(例如“ A:E”或“ A,C,E:F”)。 范围包括双方。
如果为int列表,则表示要解析的列号列表。
如果是字符串列表,则表示要解析的列名称列表。
因此,在您的情况下,传递标头中的列名称或整数列表(列索引)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.