首页 > 解决方案 > read_csv() 需要 len(names) == len(usecols)?

问题描述

我正在使用 Python 3.6.3 和 Pandas 0.21.1。

以下工作在以下情况下按预期工作engine='c'

data = 'note,,\ncolA,colB,colC\n1,2,3\n4,5,6'
import io
import pandas as pd
filesim = io.StringIO(data)
df = pd.read_csv(filesim, 
                 names=['a','b','c'], 
                 header=1, 
                 usecols=['a'],
                 engine='c')

但是,如果我切换到engine='python'我会触发这个 parrs.py 块中的错误(第 2445-2451 行):

if names is not None:
    if ((self.usecols is not None and
                 len(names) != len(self.usecols)) or       <--- my problem
                (self.usecols is None and
                 len(names) != len(columns[0]))):
                raise ValueError('Number of passed names did not match '
                                 'number of header fields in the file')

似乎我通过namesusecols. 我的问题是:

  1. 这不是usecols- 指定的子集 的预期用法names吗?如果它们的长度不相等,为什么我们会引发错误?
  2. 为什么错误消息没有提到任何关于 的内容usecols
  3. 为什么python引擎给我这个问题,而c引擎却按预期工作?

谢谢你的帮助。

标签: pythonpandascsv

解决方案


我确信 C 引擎的工作方式不同,需要指定分隔符。


推荐阅读