Python “熊猫归来”;传递的标头名称不匹配usecols“;错误
以下工作与预期的一样。共有190列,都可以完全读入Python “熊猫归来”;传递的标头名称不匹配usecols“;错误,python,pandas,Python,Pandas,以下工作与预期的一样。共有190列,都可以完全读入 pd.read\u csv(“data.csv”, 标题=无, 名称=列, #usecols=列[:10], nrows=10 ) 我以前用过usecols的论点,所以我很困惑为什么这对我不再有效。我想,简单地对前10个列名进行切片将非常有效,但我仍然会遇到“传递的头名称不匹配usecols”错误 我使用的是熊猫0.16.2 pd.read\u csv(“data.csv”, 标题=无, 名称=列, usecols=列[:10], nrows
pd.read\u csv(“data.csv”,
标题=无,
名称=列,
#usecols=列[:10],
nrows=10
)
我以前用过usecols的论点,所以我很困惑为什么这对我不再有效。我想,简单地对前10个列名进行切片将非常有效,但我仍然会遇到“传递的头名称不匹配usecols”错误
我使用的是熊猫0.16.2
pd.read\u csv(“data.csv”,
标题=无,
名称=列,
usecols=列[:10],
nrows=10
)
回溯
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
3 nrows=10,
4头=无,
---->5个名称=列,
6 )
/…解析器中的/lib/python2.7/site-packages/pandas/io/parsers.pyc(文件路径或缓冲区、sep、方言、压缩、双引号、转义、引号、引号、skipinitialspace、行终止符、标题、索引列、名称、前缀、SkipRous、skipfooter、skipfooter、skipfooter、na_值、na_值、true_值、false_值、分隔符、转换器、数据类型、usecols、引擎、delim_空格、as_recarray、na_筛选器、compact_ints、,使用无符号、内存不足、缓冲区行、警告行、错误行、保留默认行、千行、注释、十进制、解析日期、保留日期列、dayfirst、日期解析器、内存映射、浮点精度、nrows、迭代器、块大小、冗余、编码、压缩、篡改重复列、tupleize列、推断日期时间格式、跳过空白行)
472跳过空白行=跳过空白行)
473
-->474返回读取(文件路径或缓冲区,kwds)
475
476解析器名称
/…读取中的/lib/python2.7/site-packages/pandas/io/parsers.pyc(文件路径或缓冲区,kwds)
248
249#创建解析器。
-->250解析器=文本文件读取器(文件路径或缓冲区,**kwds)
251
252如果(nrows不是None)和(chunksize不是None):
/…/lib/python2.7/site-packages/pandas/io/parsers.pyc在__________(self,f,engine,**kwds)中
564 self.options['has_index_names']=kwds['has_index_names']
565
-->566自动制造发动机(自动发动机)
567
568 def _get _选项(带有默认值)(自身,引擎):
/…/m9tn/lib/python2.7/site-packages/pandas/io/parsers.pyc in_make_引擎(self,引擎)
703 def制造发动机(自,发动机class='c'):
704如果发动机=‘c’:
-->705 self.\u engine=CParserWrapper(self.f,**self.options)
706其他:
707如果引擎==“python”:
/…/lib/python2.7/site-packages/pandas/io/parsers.pyc在__________(self,src,**kwds)中
1070 kwds['allow_leading_cols']=self.index_col不为False
1071
->1072 self.\u reader=\u parser.TextReader(src,**kwds)
1073
1074#XXX
pandas.parser.TextReader.中的pandas/parser.pyx
pandas.parser.TextReader.中的pandas/parser.pyx.\u获取\u头(pandas/parser.c:7330)()
ValueError:传递的标头名称不匹配usecols
结果是数据集中有191列(不是190列)。Pandas会自动将我的第一列数据设置为索引。我不太清楚为什么它会导致它出错,因为usecols中的所有列实际上都存在于已解析的in数据集中
因此,解决方案是确认名称中的列数与数据集中的列数完全对应
另外,我在GitHub上找到了讨论。对于调试此错误的任何人来说,如果您在列名列表中忘记了尾随逗号,也可能导致此错误。e、 g:
columns = [
'industry',
'amount'
'date',
...
]
Pandas会将
amount
和date
合并成一个amountdate
,当然,列名的数量会比您预期的少一个。我也有同样的问题。找到讨论后,我验证文件中的分隔符是否为代码>
使用sep=';'在read_csv
call中的code>解决了这个问题。除了@Raluarsep=';'代码>
在pd.read_csv()
中的
参数之后添加sep='
,否则,它将把整个df作为一列读取,并且将无法解析usecols=columns[:10]
由于上述原因,names=columns
的上一个参数中没有实际解析的列。熊猫中似乎有一个bug: