【发布时间】:2019-08-06 21:13:02
【问题描述】:
about this topic on SO 已经提出了很多问题。 (以及许多其他人)。 在众多答案中,到目前为止,没有一个对我真正有帮助。如果我错过了有用的,请告诉我。
我只是想将带有熊猫的 CSV 文件读入数据框。听起来很简单。
我的档案Test.csv
1,2,3,4,5
1,2,3,4,5,6
,,3,4,5
1,2,3,4,5,6,7
,2,,4
我的代码:
import pandas as pd
df = pd.read_csv('Test.csv',header=None)
我的错误:
pandas.errors.ParserError: Error tokenizing data. C error: Expected 5 fields in line 2, saw 6
我对这个问题的猜测是,Pandas 会查看第一行,并期望在接下来的行中有相同数量的标记。如果不是这种情况,它将因错误而停止。
在众多答案中,使用选项的建议是,例如:
error_bad_lines=False 或 header=None 或 skiprows=3 以及更多无用的建议。
但是,我不想忽略任何行或跳过。而且我事先不知道数据文件有多少列和行。
所以它基本上归结为如何找到数据文件中的最大列数。这是要走的路吗?我希望有一种简单的方法可以简单地读取第一行中没有最大列号的 CSV 文件。谢谢你的任何提示。我在 Win7 上使用 Python 3.6.3、Pandas 0.24.1。
【问题讨论】:
-
似乎与昨天有人遇到的相同问题:stackoverflow.com/questions/55129640/…。要么读取整行并在之后拆分,要么更改原始文件添加包含过多列的标题行以确保安全,要么使用
csv模块 -
感谢您的链接。我会查的。我不想更改数据文件,我只是想阅读它。
-
是的,该 SO 链接中的赞成答案应该有助于解决这个问题。我喜欢
pd.read_fwf('path_to_csv', header=None)的解决方案,因为它只需要 csv 路径。 -
fwf解决方案非常具体,并且很容易中断,因为基础数据实际上不是固定宽度分隔的。 -
似乎缺少对 pandas csv 的支持的原因是输入文件不是 csv。看起来像一个,但 csv 记录预计每条记录具有相同的字段序列。上面那个没有。因此,不要羞于对输入数据进行预处理以获得 csv。 en.wikipedia.org/wiki/Comma-separated_values#Specification