我有一个函数,给定一个值,返回一个大小为100的numpy数组 . 我想将它应用于一个系列并从中创建一个数据帧,每个列在该函数返回的数组中的位置不同 . 对于Pandas来说这很容易:
import numpy as np
import pandas as pd
# placeholder for real function
def process(x):
return np.random.rand(100)
s = pd.Series(range(2700000))
df = s.apply(lambda x: pd.Series(process(x)))
不幸的是,这消耗了大量的RAM . 它消耗至少16GB并开始在我的机器上交换,我最终必须在只有一半内存的机器上运行这个代码 .
如果我改为编写 s.apply(lambda x: process(x))
,它不会消耗几乎相同的内存,但这不会得到我想要的布局 . 有没有办法在不消耗大量RAM的情况下做到这一点?
我正在使用Pandas 0.17.1和Numpy 1.9.2 .
1 回答
我想我可能已经找到了解决问题的方法 . 这似乎使用更少的内存,非常快,并保持索引像
apply
: