假设我们有大型csv文件(例如200 GB),其中只有一小部分行(例如0.1%或更少)包含感兴趣的数据。
假设我们将这样的条件定义为让一个特定列包含预定义列表中的值(例如,10K 感兴趣的值)。
odo
或 Pandas 是否有助于将行选择性加载到数据帧中?
我不知道odo
或pandas
中的任何内容都可以完全满足您的需求,从某种意义上说,您只需调用一个函数,其他一切都在后台完成。 但是,您可以编写一个简短的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_csv
和pd.concat
参数。
如果性能是一个问题,您可以通过使用 .isin
的替代方案来加快速度,如本答案中所述。