Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “熊猫归来”;传递的标头名称不匹配usecols“;错误_Python_Pandas - Fatal编程技术网

Python “熊猫归来”;传递的标头名称不匹配usecols“;错误

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

以下工作与预期的一样。共有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=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>解决了这个问题。

除了@Raluar
sep=';'

pd.read_csv()
中的
参数之后添加
sep='
,否则,它将把整个df作为一列读取,并且将无法解析
usecols=columns[:10]
由于上述原因,
names=columns
的上一个参数中没有实际解析的列。

熊猫中似乎有一个bug: