[英]unexpected behavior when combining two dataframes in pandas
這可能是一個錯誤,但它也可能是我失蹤的大熊貓的微妙之處。 我正在組合兩個數據幀,結果的索引沒有排序。 奇怪的是,我從來沒有見過一個單獨的combine_first實例,它無法維護之前排序的索引。
>>> a1
X Y
DateTime
2012-11-06 16:00:11.477563 8 80
2012-11-06 16:00:11.477563 8 63
>>> a2
X Y
DateTime
2012-11-06 15:11:09.006507 1 37
2012-11-06 15:11:09.006507 1 36
>>> a1.combine_first(a2)
X Y
DateTime
2012-11-06 16:00:11.477563 8 80
2012-11-06 16:00:11.477563 8 63
2012-11-06 15:11:09.006507 1 37
2012-11-06 15:11:09.006507 1 36
>>> a2.combine_first(a1)
X Y
DateTime
2012-11-06 16:00:11.477563 8 80
2012-11-06 16:00:11.477563 8 63
2012-11-06 15:11:09.006507 1 37
2012-11-06 15:11:09.006507 1 36
我可以重現,所以我很樂意接受建議。 關於發生了什么的猜測是最受歡迎的。
combine_first
函數使用index.union
來組合和排序索引。 index.union
docstring聲明它只在可能的情況下進行排序,因此combine_first
不一定會按設計返回排序結果。
對於非單調索引, index.union
嘗試排序,但如果存在異常則返回未排序的結果。 我不知道這是不是一個bug,但index.union
甚至沒有嘗試像你的例子中的日期時間索引那樣對單調索引進行排序。
我在GitHub上打開了一個問題,但我想你現在應該對任何日期時間索引執行a2.combine_first(a1).sort_index()
。
更新 :此錯誤現已在GitHub上修復
你真的想要使用.append()
嗎?
嘗試:-
a2.append(a1)
combine_first
實際上不是append
操作。 請參閱 - http://pandas.pydata.org/pandas-docs/dev/basics.html?highlight=combine_first#combining-overlapping-data-sets:-
偶爾出現的問題是兩個相似數據集的組合,其中一個中的值優先於另一個。 一個例子是代表特定經濟指標的兩個數據系列,其中一個被認為具有“更高質量”。 但是,較低質量的系列可能會延續到歷史,或者擁有更完整的數據覆蓋范圍。 因此,我們希望組合兩個DataFrame對象,其中一個DataFrame中的缺失值有條件地填充來自其他DataFrame的類似標記的值。
而append
是http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.append.html?highlight=append
將其他列附加到此框架的列和索引的末尾,返回一個新對象。 不在此框架中的列將添加為新列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.