熊猫 / odo / bcolz 从大型 CSV 文件中选择性加载行



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

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

odo 或 Pandas 是否有助于将行选择性加载到数据帧中?

我不知道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 的替代方案来加快速度,如本答案中所述。

最新更新