Мне нужно сгенерировать десятки CSV-файлов с миллионами строк и десятков столбцов. В настоящее время я генерирую файлы, выполняя groupby
столбцов A и 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)