我有一个函数,给定一个值,返回大小为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。
df = pd.DataFrame(np.random.randn(2700000, 100))
,这样做有什么原因吗?或者这只是关于内存消耗的一些示例问题吗? - EdChumprocess
函数只是真实函数的占位符。真实函数不仅仅是np.random.rand(100)
。 - Mike Pedersenapply
时,无法确定结果 df 的大小。您正在使用哪个版本的 numpy 和 pandas? - EdChum