[英]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.