read_csv()是否需要len(names)== len(usecols)?

时间:2018-09-28 05:15:29

标签: python pandas csv

我正在使用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',则会在parsers.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')

似乎我通过为names提供3个项目而为usecols仅提供1个项目来触发错误。我的问题是:

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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