python - 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')
似乎我通过names
为usecols
. 我的问题是:
- 这不是
usecols
- 指定的子集 的预期用法names
吗?如果它们的长度不相等,为什么我们会引发错误? - 为什么错误消息没有提到任何关于 的内容
usecols
? - 为什么python引擎给我这个问题,而c引擎却按预期工作?
谢谢你的帮助。
解决方案
我确信 C 引擎的工作方式不同,需要指定分隔符。
推荐阅读
- graphql - 如何从后端消息队列应用程序触发 GraphQL 订阅
- java - 使用 jGit 将文件推送到远程存储库
- javascript - 发布了一个 npm 包,但安装它只有基本文件
- c++ - 如何使用模板构造函数定义推导指南?
- node.js - React Native - 如何使两个设备在连接到同一网络时相互通信?
- php - 如何为我的联系表创建确认页面?
- ruby - ActiveRecord::StatementInvalid: 找不到表'users' Rails 5 教程
- python - 当我的玩家在pygame中碰撞时如何让我的玩家穿过敌人?
- r - 如何在 R 中将“foreach”和“%dopar%”与“R6”类一起使用?
- sql - 如何通过并发查询确保跨多个相关表的数据一致性