2015-05-20 216 views
22

我想用另一列的值填充一列中的缺失值。熊貓 - FillNa與另一列

我讀過循環遍歷每行將是非常糟糕的做法,並且最好是一次性完成所有事情,但我無法找到如何使用fillna方法來完成此操作。

數據之前

Day Cat1 Cat2 
1 cat mouse 
2 dog elephant 
3 cat giraf 
4 NaN ant 

數據後

Day Cat1 Cat2 
1 cat mouse 
2 dog elephant 
3 cat giraf 
4 ant ant 

回答

45

您可以提供此列fillna(見docs),它將使用匹配的索引這些值來填充:

In [17]: df['Cat1'].fillna(df['Cat2']) 
Out[17]: 
0 cat 
1 dog 
2 cat 
3 ant 
Name: Cat1, dtype: object 
+0

不錯!我不知道''fillna''需要一個系列。 –

+0

謝謝!我認爲這個系列必須是NA值的確切數量。 – xav

4

你可以做

df.Cat1 = np.where(df.Cat1.isnull(), df.Cat2, df.Cat1) 

在RHS整體結構使用the ternary pattern from the pandas cookbook(這是值得的閱讀在任何情況下) 。這是一個矢量版本a? b: c

+0

不我用這個問題的解決方案,但非常有趣的模式!謝謝! – xav

4

只需使用value參數,而不是method

In [20]: df 
Out[20]: 
    Cat1  Cat2 Day 
0 cat  mouse 1 
1 dog elephant 2 
2 cat  giraf 3 
3 NaN  ant 4 

In [21]: df.Cat1 = df.Cat1.fillna(value=df.Cat2) 

In [22]: df 
Out[22]: 
    Cat1  Cat2 Day 
0 cat  mouse 1 
1 dog elephant 2 
2 cat  giraf 3 
3 ant  ant 4 
+0

感謝您的回答!使用價值而不是joris描述的方法會改變什麼? – xav

+0

@xav'value'是第一個參數,所以joris實際上在做同樣的事情。正如他所說,請參閱[文檔](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.fillna.html)。 – chrisaycock

+0

是的,文檔字符串有點誤導,因爲'方法'首先在那裏列出。 – joris