将列添加到DataFrame并生成新的DataFrame,但不复制整个数据的最有效方法是什么?看看pandas.DataFrame.assign的实现:
class DataFrame()
def assign(self, **kwargs):
data = self.copy() # deep=True is the default!
...
我正在使用一个使用pandas的生产系统,我希望最大限度地减少内存使用(我们的数据帧运行~500Mb,尽管主要由memmapped ndarrays支持)。上面的内存看起来很慢(和时间)。 如上所述~10个深拷贝不必要地将完整数据带入RAM并导致交换。通常,我们不需要超过500Mb +小索引,但这样的副本会杀死我们的服务器。
答案 0 :(得分:0)
以这种方式:
import numpy as np
import pandas as pd
def pd_sensible_assign(df, **kwargs):
def gen():
for c in df.columns: yield c.name,c
for k,v in kwargs.iteritems(): yield k,v
return pd.DataFrame(gen(), index=df.index, copy=False)
x = np.arange(0,10,0.1)
b=np.zeros(len(x), dtype=float)
X = pd.DataFrame({"x":x}, copy=False)
print X.shape, X.dtypes
X = pd_sensible_assign(X, b=b)
print X.shape, X.dtypes
我不喜欢它,因为它没有处理不匹配索引的情况。