[英]Dealing with Parse Errors when reading in csv via dask.dataframe
我正在处理一个大型 csv 文件(>300 万行,76 列),并决定在转换为 pandas 数据框之前使用 dask 读取数据。
但是,我遇到了一个问题,即最后一列中的列出血。 请参阅下面的代码和错误。
import dask.dataframe as dd
import pandas as pd
dataframe = dd.read_csv("SAS url",
delimiter = ",",
encoding = "UTF-8", blocksize = 25e6,
engine = 'python')
然后查看是否所有列都存在,我使用
dataframe.columns
使用时
dataframe.compute()
我看到以下错误:
当使用 read_csv 参数error_bad_lines = False
时,它显示许多行有 77 或 78 个字段,而不是预期的 76 个。
注意:很遗憾,忽略这些错误行不是一种选择。
有没有办法保留所有字段并在必要时将这些额外字段附加到新列?
就在这里。 在阅读完整的 CSV 之前,您可以使用names=
参数添加额外的列。 我没有用Dask
尝试过这个,但是Dask
read_csv
在幕后调用 Pandas read_csv
所以这也应该适用于dd.read_csv
。
演示使用模拟 CSV 文件:
sim_csv = io.StringIO(
'''A,B,C
11,21,31
12,22,32
13,23,33,43,53
14,24,34
15,25,35'''
)
默认情况下, read_csv
失败:
df = pd.read_csv(sim_csv)
ParserError: Error tokenizing data. C error: Expected 3 fields in line 4, saw 5
捕获列名:
sim_csv.seek(0) # Not needed for a real CSV file
df = pd.read_csv(sim_csv, nrows=1)
save_cols = df.columns.to_list()
在名称列表的末尾添加几个列名并阅读您的 CSV:
sim_csv.seek(0) # Not needed for a real CSV file
df = pd.read_csv(sim_csv, skiprows=1, names=save_cols+['D','E'])
df
A B C D E
0 11 21 31 NaN NaN
1 12 22 32 NaN NaN
2 13 23 33 43.0 53.0
3 14 24 34 NaN NaN
4 15 25 35 NaN NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.