2015-03-30 159 views
7

我找不到一個pandas函數(我曾經見過),用一個數據幀中的NaN替換另一個數據幀中的值(假設可以指定一個通用索引)。任何幫助?熊貓從另一個數據幀中填充數據幀中的缺失值

+0

聲音就像你想要合併。請顯示一些示例場景。 – 2015-03-30 22:21:38

+0

找到了!我想使用combine_first – user308827 2015-03-30 22:22:40

+1

http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.combine_first.html – user308827 2015-03-30 22:22:43

回答

11

如果你有兩塊形狀相同的DataFrames,則:

df[df.isnull()] = d2 

會做的伎倆。

visual representation

只有在df.isnull()計算爲True(綠色高亮顯示)的位置將有資格獲得分配。

實際上,DataFrame並不總是相同的大小/形狀,並且轉換方法(尤其是.shift())很有用。

進來的數據總是骯髒,不完整或不一致。參加課程。有一個相當廣泛的熊貓tutorial and associated cookbook處理這些情況。

5

正如我剛纔瞭解到,有一個DataFrame.combine_first()方法,其目的正是這個,與附加屬性,如果你的更新數據幀d2是大於你原來df,額外的行和列加,以及。

df = df.combine_first(d2) 
3

DataFrame.combine_first()準確回答這個問題。

但是,有時要填充/替換/從數據幀B.這個問題把我帶到這個網頁值覆蓋一些數據幀A的非缺失(非NAN)值的,解決的辦法是DataFrame.mask()

A = B.mask(condition, A) 

condition爲真時,將使用來自A的值,否則將使用B的值。

例如,你可以解決了OP的原題與mask這樣,當從A的元素是不可楠,使用它,否則使用相應的元素,從B.

但使用DataFrame.mask()你可以更換A的值不符合任意標準(小於零?超過100?)與B的值。因此mask更靈活,並且這個問題的矯枉過正,但我​​認爲這是值得一提的(我需要它來解決我的問題)。

注意到B可能是一個numpy數組而不是DataFrame也很重要。 DataFrame.combine_first()要求B是數據框,但是DataFrame.mask()只要求B是NDFrame並且其尺寸與A的尺寸相匹配。

相關問題