首页 文章

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

提问于
浏览
2

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

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

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

相关问题