簡體   English   中英

在pandas中組合兩個數據幀時出現意外行為

[英]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的類似標記的值。

appendhttp://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.append.html?highlight=append

將其他列附加到此框架的列和索引的末尾,返回一個新對象。 不在此框架中的列將添加為新列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM