读取 csv 文件对数据进行排序然后将排序后的数据写入另一个 csv 的最快方法是什么

问题描述 投票:0回答:1

我有一个包含多个 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 进行迭代。 我考虑过使用异步,但不确定这是否是最好的方法。

python python-3.x pandas dataframe bigdata
1个回答
0
投票

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)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.