首页 > 解决方案 > 有没有更快的方法来生成 .csv 文件作为 groupby 和循环的替代方法?

问题描述

我必须生成数十个具有数百万行和数十列的 .csv 文件。我目前正在通过执行groupbyA 列和 B 列并循环以动态生成文件来生成文件to_csv。下面是我正在尝试做的一个例子。有更快的技术吗?我的实际数据框需要 10 多分钟才能运行,并且变得非常痛苦,这对几个项目都是有益的。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0, 3, size=(10000,3)), columns=list('ABC'))
%timeit for (a,b), x in df.groupby(['A', 'B']): x.to_csv(f'{a}_Invoice_{b}.csv', index=False)

时间流逝:

45.2 ms ± 1.58 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

另外,我创建了一个函数,它有类似的时间,但我想发布它,这样人们可以更轻松地修改它以供%timeit在答案超过一行代码时使用。

import pandas as pd
import numpy as np

def generate_invoices(df):
    for (a,b), x in df.groupby(['A', 'B']):
        x.to_csv(f'{a}_Invoice_{b}.csv', index=False)
    return

df = pd.DataFrame(np.random.randint(0, 3, size=(10000,3)), columns=list('ABC'))
%timeit generate_invoices(df)

标签: pythonpandas

解决方案


推荐阅读