あなたの質問に答えるには:はい。value
fillnaの引数の使い方を見てください。to_dict()
他のデータフレームのメソッドと一緒に。
しかし、あなたの問題を本当に解決するupdate()
には、DataFrameのメソッドを見てください。あなたの2つのデータフレームが同様にインデックス化されていると仮定すると、それはまさにあなたが望むものだと思います.
In [36]: df = pd.DataFrame({'A': [0, np.nan, 2, 3, np.nan, 5], 'B': [1, 0, 1, np.nan, np.nan, 1]})
In [37]: df
Out[37]:
A B
0 0 1
1 NaN 0
2 2 1
3 3 NaN
4 NaN NaN
5 5 1
In [38]: df2 = pd.DataFrame({'A': [0, np.nan, 2, 3, 4, 5], 'B': [1, 0, 1, 1, 0, 0]})
In [40]: df2
Out[40]:
A B
0 0 1
1 NaN 0
2 2 1
3 3 1
4 4 0
5 5 0
In [52]: df.update(df2, overwrite=False)
In [53]: df
Out[53]:
A B
0 0 1
1 NaN 0
2 2 1
3 3 1
4 4 0
5 5 1
も含まれていたため、 を除いて、 のすべての が置き換えられてNaN
いることに注意してください。また、 のような値のいくつかはと の間で異なります。それを使用することで、 からの値を保持します。df
(1, A)
NaN
df2
(5, B)
df
df2
overwrite=False
df
編集:コメントに基づいて、列名が2つのDataFrameで一致しないソリューションを探しているようです(サンプルデータを投稿すると役立ちます)。列 A を C に、列 B を D に置き換えてみましょう。
In [33]: df = pd.DataFrame({'A': [0, np.nan, 2, 3, np.nan, 5], 'B': [1, 0, 1, np.nan, np.nan, 1]})
In [34]: df2 = pd.DataFrame({'C': [0, np.nan, 2, 3, 4, 5], 'D': [1, 0, 1, 1, 0, 0]})
In [35]: df
Out[35]:
A B
0 0 1
1 NaN 0
2 2 1
3 3 NaN
4 NaN NaN
5 5 1
In [36]: df2
Out[36]:
C D
0 0 1
1 NaN 0
2 2 1
3 3 1
4 4 0
5 5 0
In [37]: d = {'A': df2.C, 'B': df2.D} # pass this values in fillna
In [38]: df
Out[38]:
A B
0 0 1
1 NaN 0
2 2 1
3 3 NaN
4 NaN NaN
5 5 1
In [40]: df.fillna(value=d)
Out[40]:
A B
0 0 1
1 NaN 0
2 2 1
3 3 1
4 4 0
5 5 1
パンダを学ぶために時間を投資すれば、フラストレーションを感じる瞬間が少なくなると思います。ただし、大規模なライブラリであるため、時間がかかります。