Pandas“应用”到多个占用大量内存的列中

时间:2016-03-10 08:37:28

标签: pandas

我有一个函数,给定一个值,返回一个大小为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 个答案:

答案 0 :(得分:0)

我想我可能找到了解决问题的方法。这似乎使用更少的内存,非常快,并保持索引像apply那样:

pd.DataFrame(np.vstack(map(process, s)), index=s.index)