我有一个非常大的数据帧的大数据帧列乘
in>> all_data.shape
out>> (228714, 436)
我想什么有效牙缝做的是乘法多列在一起。我开始用一个for循环和列的列表 - 我已经找到了最effcient方式是
from itertools import combinations
newcolnames=list(all_data.columns.values)
newcolnames=newcolnames[0:87]
#make cross products (the columns I want to operate on are the first 87)
for c1, c2 in combinations(newcolnames, 2):
all_data['{0}*{1}'.format(c1,c2)] = all_data[c1] * all_data[c2]
的问题,因为人们可以猜测是我有87列,这将使3800个新列的顺序(是的这是我的意图)。我的jupyter笔记本和ipython shell在这个计算上都会窒息。我需要找出一个更好的方法来进行这种增殖。
是否有更高效的矢量化和/或处理方式?也许使用numpy数组(我的数据帧已经被处理,现在只包含数字和NAN,它以分类变量开始)。
似乎并没有太大的改变 - 它仍然会采取多小时,我的所有系统内存(8GB)。这很奇怪,如果我把这个过程分解成块(比如说前5列)。当我继续时,尽管需要做更少的计算,但这个过程变慢了。列1的第一个“轮”应该进行86列计算,而大约40我应该减少到40列。事实上,第一部分是在几秒钟内跑完的,而第40-45列则花了一个多小时。很奇怪。 – RDS
恐怕一个228714行和3800+列的数据框会占用8GB内存,假设你的df中的16位数是双倍,228714 * 3800 * 16/1024 ** 3 = 12.95 GB – cncggvg