Pandas / odo / bcolz选择性加载大型CSV文件中的行

时间:2016-02-04 15:40:57

标签: python-3.x pandas blaze bcolz odo

假设我们有大型csv文件(例如200 GB),其中只有一小部分行(例如0.1%或更少)包含感兴趣的数据。

假设我们将这样的条件定义为具有一个特定列包含来自预定义列表的值(例如10K感兴趣的值)。

odo或Pandas是否有助于将这种类型的行选择性加载到数据帧中的方法?

1 个答案:

答案 0 :(得分:4)

我不知道odopandas中的任何内容与您正在寻找的内容完全相同,因为您只需要调用一个函数,而其他所有操作都在幕后完成。但是,您可以编写一个简短的pandas脚本来完成工作。

基本思想是迭代csv文件的块,这些块将适合内存,只保留感兴趣的行,然后在最后组合所有感兴趣的行。

import pandas as pd

pre_defined_list = ['foo', 'bar', 'baz']
good_data = []
for chunk in pd.read_csv('large_file.csv', chunksize=10**6):
    chunk = chunk[chunk['column_to_check'].isin(pre_defined_list)]
    good_data.append(chunk)

df = pd.concat(good_data)

根据您的具体情况,根据需要添加/更改pd.read_csvpd.concat的参数。

如果性能问题,您可以使用.isin的替代方法加快速度,如this answer中所述。