简单的熊猫df计算在无穷大中丢失

时间:2018-05-22 22:52:08

标签: python pandas

设置

我有中等大小的df(600K乘40),我试图将元素明智(通过索引)系列值加在一起,然后创建一个带有后续值的新列。但是,它需要超过24小时,但尚未完成。

首先我制作两个系列:

(来自原始df,有一些约束)

 Series1 = df.loc[df['ColumnX'] == 5, 'ColumnY']
 Series2 = df.loc[df['ColumnX'] == 6, 'ColumnY']

其次我将它们添加到一起并作为新列插入到原始df中:

 df['column1plus2'] = Series1 + Series2

在弱中型服务器上计算是不是需要超过24小时,如果是的话?我做了一些根本错误的事情吗?

1 个答案:

答案 0 :(得分:0)

由于您选择的互斥性(5对6),Series1所有行的索引与所有的索引不同Series2中的行。运算符+使用数据对齐来查找匹配的行,但不能。因此,它会使用NaN的值创建匹配的虚拟对象,并将它们添加到系列中的值。 (当然,结果也是NaN。)例如,如果Series1中有第10行(例如3.14的值),则不会有相同的行Series2中的号码。 Pandas将在Series2中创建第10行,并将其值设置为NaN,因为它不知道更好。第10行中求和的结果现在是3.14+NaN=NaN

这解释了为什么您的代码错误,但不一定是为什么它的速度很慢。我猜想在存在这么多缺失值的情况下,数据对齐是一个非常慢的操作。

你的意思是堆叠Series1Series2而不是算术地添加它们吗?如果是这样,您应该pd.concat[Stack1,Stack2])