我有一个生成器,它返回我想要转换为索引的pandas数据帧的未知数量的数据行.我所知道的最快的方法是将CSV写入磁盘,然后通过'read_csv'解析.我知道创建一个空数据帧然后不断追加新行是没有效率的.我无法创建预先调整大小的数据帧,因为我不知道将返回多少行.有没有办法将迭代器输出转换为pandas数据帧而无需写入磁盘?
我在 15M 行数据帧上运行 groupby,按 2 个键(每个键最多 30 个字符)进行分组,并应用返回多个值的自定义聚合函数,然后写入 CSV。我有两种方法,一种方法耗尽内存并失败,另一种方法太慢(需要超过 24 小时才能运行这么远......)。简化代码如下。
是否有: - 有什么方法可以减少方法 1 的内存使用,或者 - 有什么方法可以加快方法 2 中的迭代器速度
import pandas as pd
import numpy as np
def myfunct(x):
# test function
return 1,2,3
# fake the dataset
df = pd.DataFrame(np.random.randn(1500,3), columns=['a', 'b', 'c'])
df['key1'] = np.random.choice(['A','B','C','D','E'], df.shape[0])
df['key2'] = np.random.choice(['A','B','C','D','E'], df.shape[0])
# group and aggregate
grouped = df.groupby(['key1', 'key2'], sort=False)
#
# APPROACH 1.
#
# Works but runs out of memory on 15M row datafram with 30 …Run Code Online (Sandbox Code Playgroud)