【发布时间】:2019-04-12 17:36:17
【问题描述】:
我有一个格式如下的 CSV 文件,除了大约 2000 万行:
A,B,C,D
1,2,3,4
1,1,3,4
1,0,0,1,4,3
1,0,5,6,2,1
我尝试用这样的熊猫阅读:
df = pd.read_csv(_out_path, sep=',', engine='c') # engine c because it's faster
这会导致以下错误:
ParserError: Error tokenizing data. C error: Expected 18 fields in line 13674206, saw 31
使用上面的测试文件,pandas 会处理这个问题,并添加两个未命名的列,其中前两行包含 np.NAN。
A B C D Unnamed: 4 Unnamed: 5
0 1 2 3 4 NaN NaN
1 1 1 3 4 NaN NaN
2 1 0 0 1 4.0 3.0
3 1 0 5 6 2.0 1.0
但是,对于真实文件(很遗憾,我无法共享),它会导致上述错误。
我正在寻找一种解决方法,方法是找到逗号最多的行,计算逗号的 Nr 并根据需要在每一行附加尽可能多的逗号,以便 pandas 读取文件。 或者理想情况下是一种更简单的方式来读取文件。
编辑:
数据已从数百个 CSV 文件中连接起来,但在中间添加了新列(不幸的是,最后不是全部)。 因此,一个好的解决方案(感谢 cmets)是拆分条目 nr 更改的文件。
此外,文件中没有标题。我尝试在此示例的第一行手动添加它们,所以我想我必须在拆分文件后添加标题。
【问题讨论】:
-
如果你不需要额外的列,你可以试试
usecols=[0,1,2,3]。或者,您可以使用error_bad_lines=False warn_bad_lines=True跳过并记录错误行。 pandas.pydata.org/pandas-docs/stable/user_guide/io.html -
显然这是对数百个 csvs 的合并。添加一些点,他们开始添加更多数据列......不幸的是,它被添加到了中间的某个地方,现在我需要的数据已经发生了变化。我的想法是使用额外列是否为 na 的条件拆分为数据框,然后重新排列列。或者,我可以根据每行逗号的 nr 拆分 CSV 文件,但我不知道该怎么做
-
这太残忍了。无论谁决定应该将这些数据连接起来,都应该受到制裁。如果您愿意提出问题以便它要求拆分数据,我愿意写一个答案。最好知道列数增加的行是否有新的标题,或者是否只有第一行之后的数字。
-
我编辑了问题以添加拆分
标签: python python-3.x pandas