我有一个奇怪的问题,我终于设法重现它。带有非唯一索引的熊猫DataFrame对象的列操作
这里是泡菜文件:https://cloudup.com/cr71lzPei-D
data = pickle.load(open('temp/toy.pkl', 'rb'))
print(data.shape)
delta = data.date1 - data.date2
print(delta.shape)
print(sys.version)
print(pd.__version__)
这里是输出:
(99, 2)
(239,)
3.4.0 (default, Apr 9 2014, 11:51:10)
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.38)]
'0.14.1'
正如你可以看到,delta
率比原始表大很多。它看起来像计算使用索引在两列上执行完整的外连接,这有些出乎意料。如何以及何时发生这种行为,有没有办法阻止它?
原始邮件
我不能用玩具问题重现,所以我会尽量解释一下的话。
我有一个熊猫DataFrame
约100K行,约20列和一个非唯一索引。当我尝试计算两列之间的差异时,我得到的结果比原始表格长5倍以上。如果,而不是table.column1 - table.column2
我做numpy.array(table.column1) - numpy.array(table.column2)
我得到预期的结果。
它看起来像计算使用索引执行两列的完整外部联接,但是当我试图用玩具问题重现此行为时,我从来没有得到类似的结果。
我还测试了NaN
S是否影响这一点:有NaN
S IN在我的原始数据中的一列,但NaN
玩具问题,如预期的工作,所以我必须要排除NaN
秒。
如何以及何时发生此行为,并有一种更简单的方法(与转换为numpy.array
相比),以防止它?
只是出于好奇,你有任何'NaN'值吗?这并不能解释所有内容,但是如果你的任何一列有'NaN'值,在过去我发现合并包含'NaN'值的列以引起额外的行被添加,所以我总是检查并放下它们。无论如何值得检查。 – EdChum 2014-09-21 21:05:35