gpt4 book ai didi

python - 这 8 行 python + pandas 需要大约 1 个月才能执行,能帮我加快速度吗?

转载 作者:行者123 更新时间:2023-11-30 23:04:28 25 4
gpt4 key购买 nike

我有一个 30GB 的 csv 文件,包含 2 列、80M 行。一列有 80M 个唯一元素(电子邮件),另一列有 5M 个唯一元素(匿名发件人),其中 80M 映射到多对一。我想输出一个仅包含 5M 行的 csv:发件人、发件人发送的电子邮件

此代码理论上可行,但实际上,Xeon CPU 核心 100% 运行时需要约 1 个月才能完成

df = pd.read_csv('emails.csv')
uni = df.sender_id.unique()
grouped = ((i, ' '.join(df.text[df.sender_id == i])) for i in uni)
with open('/storage/test.csv', 'w') as csvfile:
test_writer = csv.writer(csvfile)
for i in grouped:
test_writer.writerow(i)
csvfile.close()

知道如何让它更快吗?我尝试过将其与 joblib 并行化,但我的 RAM 不足。

最佳答案

我发现这行代码有问题:

grouped = ((i, ' '.join(df.text[df.sender_id == i])) for i in uni)

执行需要 O(80M x 5M)。对于每个发件人,它都会检查所有 80M 封邮件以匹配发件人,并加入匹配的电子邮件。

相反,您只能遍历电子邮件一次:

from collections import defaultdict

df = pd.read_csv('emails.csv')
grouped = defaultdict(str)
for i, text in zip(df.sender_id, df.text):
grouped[i] += text + ' '

with open('/storage/test.csv', 'w') as csvfile:
test_writer = csv.writer(csvfile)
for i in grouped.items(): # use iteritems in Python2
test_writer.writerow(i)

如果 cvsfile 来自“with”语句,我认为您不需要显式关闭它。感谢 njzk2 建议 defaultdict。

关于python - 这 8 行 python + pandas 需要大约 1 个月才能执行,能帮我加快速度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33700234/

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