gpt4 book ai didi

python - 加快 ~50GB CSV 文件的轻处理

转载 作者:太空狗 更新时间:2023-10-29 21:02:56 27 4
gpt4 key购买 nike

我有一个 ~50GB 的 csv 文件,我必须使用它

  • 获取 CSV 列的几个子集
  • 对 CSV 列的每个子集应用不同的格式字符串规范。
  • 使用自己的格式规范为每个子集输出一个新的 CSV。

我选择使用 Pandas,并采用一种通用方法迭代方便的 block 大小(刚好超过 50 万行)的 block 以生成 DataFrame,并将该 block 附加到每个输出 CSV。所以像这样:

_chunk_size = 630100

column_mapping = {
'first_output_specification' : ['Scen', 'MS', 'Time', 'CCF2', 'ESW10'],
# ..... similar mappings for rest of output specifications
}
union_of_used_cols = ['Scen', 'MS', 'Time', 'CCF1', 'CCF2', 'VS', 'ESW 0.00397', 'ESW0.08',
'ESW0.25', 'ESW1', 'ESW 2', 'ESW3', 'ESW 5', 'ESW7', 'ESW 10', 'ESW12',
'ESW 15', 'ESW18', 'ESW 20', 'ESW22', 'ESW 25', 'ESW30', 'ESW 35',
'ESW40']

chnk_iter = pd.read_csv('my_big_csv.csv', header=0, index_col=False,
iterator=True, na_filter=False, usecols=union_of_used_cols)

cnt = 0
while cnt < 100:
chnk = chnk_iter.get_chunk(_chunk_size)
chnk.to_csv('first_output_specification', float_format='%.8f',
columns=column_mapping['first_output_specification'],
mode='a',
header=True,
index=False)
# ..... do the same thing for the rest of the output specifications

cnt += 1

我的问题是这真的很慢。每个 block 大约需要一分钟来生成 CSV 文件的追加,因此我正在寻找将近 2 小时的任务来完成。

我尝试通过在读取 CSV 时仅使用列子集的并集以及设置 na_filter=False 来进行一些优化,但这仍然是 Not Acceptable 。

我想知道是否有更快的方法在 Python 中对 CSV 文件进行这种轻量级处理,要么通过优化或更正我的方法,要么可能只是有一个更好的工具适合这种工作然后Pandas... 对我(一个没有经验的 Pandas 用户)来说,这看起来和 Pandas 一样快,但我很可能错了。

最佳答案

我认为您不会从 Panda 的数据帧中获得任何优势,所以它只是增加了开销。相反,您可以使用 python 自己的 CSV module它易于使用,并且在 C 语言中得到了很好的优化。

考虑将更大的 block 读入内存(一次可能为 10MB),然后在进入下一个 block 之前写出每个重新格式化的列子集。这样,输入文件只会被读取和解析一次。

您可以尝试的另一种方法是使用 Unix cut 预处理数据命令仅提取相关列(这样 Python 就不必创建对象并为未使用的列中的数据分配内存):cut -d, -f1,3,5 somedata.csv

最后,尝试运行 PyPy 下的代码以便通过跟踪 JIT 优化脚本的 CPU 绑定(bind)部分。

关于python - 加快 ~50GB CSV 文件的轻处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38562864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com