尝试在pandas的read_csv
这样的文件中使用dask的read_csv
dd.read_csv('data/ecommerce-new.csv')
因以下错误而失败:
pandas.errors.ParserError: Error tokenizing data. C error: EOF inside string starting at line 2
该文件是使用带有两列的scrapy的抓取数据的csv文件,一列带有url,另一列带有html(使用"
存储多行作为分隔符char)。实际上被pandas解析意味着它实际上应该是格式良好的。
html,url
https://google.com,"<a href=""link"">
</a>"
使sample
参数足够大以将整个文件加载到内存中似乎可行,这让我相信它在尝试推断数据类型时实际上失败了(也就是这个问题
应该已经解决了https://github.com/dask/dask/issues/1284)
以前有人遇到过这个问题吗?有修复/解决方法吗?
编辑:如果文件在引号之间包含换行符,显然这是dask的read_csv的已知问题。我发现的解决方案是在内存中简单地读取它:
dd.from_pandas(pd.read_csv(input_file), chunksize=25)
这是有效的,但代价是并行性。还有其他解决办法吗?
答案 0 :(得分:2)
对于2020年到达这里的人们,dd.read_csv
可直接用于引号内的换行符。已修复。更新到最新版本的Dask(2.18.1
及更高版本)以获得这些好处。
import dask.dataframe as dd
df = dd.read_csv('path_to_your_file.csv')
print(df.compute())
礼物
html url
0 https://google.com <a href="link">\n</a>
OR
对于因某些原因想要使用旧版本的用户,如@mdurant所建议,您可能希望将blocksize=None
传递给dd.read_csv
,这将花费并行加载的费用。