假设我们有大型csv文件(例如200 GB),其中只有一小部分行(例如0.1%或更少)包含感兴趣的数据。
假设我们定义了这样的条件,比如有一个特定的列包含一个来自预定义列表的值(例如,10K感兴趣的值)。
odo或Pandas是否为这种类型的有选择地将行加载到数据仓库的方法提供了便利?
发布于 2016-02-04 19:44:15
在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的方法来加快速度,如this答案中所描述的那样。
https://stackoverflow.com/questions/35205268
复制相似问题