Dask read_csv失败,而pandas没有

时间:2017-08-18 09:08:45

标签: python pandas dask

尝试在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)

这是有效的,但代价是并行性。还有其他解决办法吗?

1 个答案:

答案 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,这将花费并行加载的费用。