【发布时间】:2014-10-03 18:42:10
【问题描述】:
此代码有效 - 它将每列设置为其平均值:
def setSerNanToMean(serAll):
return serAll.replace(np.NaN, serAll.mean())
def setPdfNanToMean(pdfAll, listCols):
pdfAll.ix[:,listCols] = pdfAll.ix[:,listCols].apply(setSerNanToMean)
setPdfNanToMean(pdfAll, [1,2,3,4])
此代码不起作用:
def setSerNanToMean(serAll):
return serAll.replace(np.NaN, serAll.mean())
def setPdfNanToMean(pdfAll, listCols):
pdfAll.ix[:,listCols].apply(setSerNanToMean) # This line has changed!
setPdfNanToMean(pdfAll, [1,2,3,4])
为什么第二个代码块不起作用? DataFrame.apply() 不是默认就地吗? apply 函数没有 inplace 参数。如果它不能正常工作,这不是让 pandas 成为一个糟糕的内存处理程序吗?在这种情况下,所有 pandas 数据框操作都会复制所有内容吗?就地做不是更好吗?即使它没有默认就地,它不应该像 replace() 那样提供就地参数吗?
我寻找的不是具体的答案,而是一般的理解。同样,这些代码块之一有效,所以我可以继续前进,但我真正想做的是了解 pandas 如何处理内存对象的操作。我有 McKinney 的书,因此非常欢迎页面参考,因此您不必输入太多。
【问题讨论】:
标签: python memory-management pandas