我有一個奇怪的問題,我終於設法重現它。帶有非唯一索引的熊貓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