gpt4 book ai didi

python - Pandas .loc 需要很长时间

转载 作者:太空宇宙 更新时间:2023-11-03 15:45:24 30 4
gpt4 key购买 nike

我有一个 10 GB 的 csv 文件,其中包含 170,000,000 行和 23 列,我按如下方式读入数据框:

import pandas as pd 

d = pd.read_csv(f, dtype = {'tax_id': str})

我还有一个包含近 20,000 个唯一元素的字符串列表:

h = ['1123787', '3345634442', '2342345234', .... ]

我想在数据框 d 中创建一个名为 class 的新列。我想分配 d['class'] = 'A' 每当 d['tax_id'] 有一个在字符串列表 h 中找到的值。否则,我想要 d['class'] = 'B'

以下代码在我的数据帧 d 的 1% 样本上运行非常快:

d['class'] = 'B'
d.loc[d['tax_num'].isin(h), 'class'] = 'A'

但是,在完整的数据帧 d 上,这段代码在 32 核服务器上以批处理模式运行需要超过 48 小时(并且还在增加)。我怀疑使用 loc 进行索引会减慢代码速度,但我不确定它到底是什么。

总而言之:是否有更有效的方法来创建 class 列?

最佳答案

如果您的税号是唯一的,我建议将 tax_num 设置为索引,然后对其进行索引。就目前而言,您调用 isin 这是一个线性运算。无论您的机器有多快,它都无法在合理的时间内对 1.7 亿条记录进行线性搜索。

df.set_index('tax_num', inplace=True) # df = df.set_index('tax_num')
df['class'] = 'B'
df.loc[h, 'class'] = 'A'

如果您仍然为性能问题所苦,我建议您使用 dask 切换到分布式处理。

关于python - Pandas .loc 需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50206517/

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