我有一个包含多个 csv 文件的海量数据集 ~600Gb。每个 csv 文件包含 130 万 x 17 组数据。看起来像这样
index duration is_buy_order issued location_id min_volume order_id price range system_id type_id volume_remain volume_total region_id http_last_modified station_id constellation_id universe_id
0 90 True 2021-05-04T23:31:50Z 60014437 1 5980151223 5.05 region 30000001 18 249003 250000 10000001 2021-06-19T16:45:32Z 60014437.0 20000001 eve
1 90 True 2021-04-29T07:40:27Z 60012145 1 5884280397 5.01 region 30000082 18 13120 100000 10000001 2021-06-19T16:45:32Z 60012145.0 20000012 eve
2 90 False 2021-04-28T11:46:09Z 60013867 1 5986716666 12500.00 region 30000019 19 728 728 10000001 2021-06-19T16:45:32Z 60013867.0 20000003 eve
3 90 False 2021-05-22T14:13:15Z 60013867 1 6005466300 6000.00 region 30000019 19 5560 9191 10000001 2021-06-19T16:45:32Z 60013867.0 20000003 eve
4 90 False 2021-05-27T08:14:29Z 60013867 1 6008912593 5999.00 region 30000019 19 1 1 10000001 2021-06-19T16:45:32Z
我目前将其保存在数据框中。我通过一些逻辑运行它,通过我寻找的特定“region_id”过滤掉所有数据,然后将其放入一个空数据框中。像这样的东西:
path = pathlib.Path('somePath')
data = pd.read_csv(path)
region_index = data.columns.get_loc('region_id')
newData = pd.DataFrame(columns=data.columns)
for row in data.values:
if row[region_index] == region.THE_FORGE.value:
newData.loc[len(newData)] = row.tolist()
newData.to_csv(newCSVName, index=False)
然而,这需要约 74 分钟来浏览单个文件...我需要执行超过 600GB 的文件...
因此,正如标题提到的,我可以/应该执行此操作的最快方法是什么,我可以对所有 csv 进行迭代。 我考虑过使用异步,但不确定这是否是最好的方法。
pandas
提供优化的基于 C 的函数,可使用本机数据类型处理整个表。当您迭代行、查看各个值并将其转换为列表时,pandas
必须将其本机数据类型转换为 Python 对象 - 这可能会很慢。
看起来您可以通过单个已知的region_id过滤数据帧并直接写入csv
path = pathlib.Path('somePath')
data = pd.read_csv(path)
data[data['region_id'] == region.THE_FORGE.value]].to_csv(newCSVName, index=False)