簡體   English   中英

在 Python 中使用 Replace() 或 fillna() 將 NAN 替換為 Pandas 中列的字典值

[英]Replace NAN with Dictionary Value for a column in Pandas using Replace() or fillna() in Python

我是 python 的新手,我正在嘗試使用 fillna() 功能並遇到一些問題。 我有一個名為 Temp_Data_DF 的 DataFrame,它有如下兩列:

Temp_Data_DF:
A  B
1  NAN
2  NAN
3  {'KEY':1,'VALUE':2}

我想用 Dict 值替換所有 NAN,結果數據框應該是這樣的:

Temp_Data_DF:
A  B
1  {'KEY':1,'VALUE':2}
2  {'KEY':1,'VALUE':2}
3  {'KEY':1,'VALUE':2}

我嘗試了以下代碼:

Bvalue = {'KEY':1,'VALUE':2}
Temp_Data_DF['B']=Temp_Data_DF['B'].fillna(Bvalue)

但它並沒有用所需的價值替換 NAN 任何幫助將不勝感激。

我指的是下面的鏈接。

鏈接: Pandas dataframe fillna() 只有一些列就位

您可以通過dictionary創建的Seriesfillna

Bvalue = {'KEY':10,'VALUE':20}
Temp_Data_DF['B']=Temp_Data_DF['B'].fillna(pd.Series([Bvalue], index=Temp_Data_DF.index))
print (Temp_Data_DF)
   A                         B
0  1  {'VALUE': 20, 'KEY': 10}
1  2  {'VALUE': 20, 'KEY': 10}
2  3    {'VALUE': 2, 'KEY': 1}

詳情

print (pd.Series([Bvalue], index=Temp_Data_DF.index))
0    {'VALUE': 20, 'KEY': 10}
1    {'VALUE': 20, 'KEY': 10}
2    {'VALUE': 20, 'KEY': 10}
dtype: object

它是如何工作的:

想法是創建與字典填充的原始系列相同大小的新Series ,因此如果使用另一個Series fillna很好。

另一個解決方案:想法是使用NaN != NaN ,所以如果在Series.apply使用if-else ,它也會替換:

Bvalue = {'KEY':10,'VALUE':20}
Temp_Data_DF['B']=Temp_Data_DF['B'].apply(lambda x: x if x == x else Bvalue)
print (Temp_Data_DF)
   A                         B
0  1  {'KEY': 10, 'VALUE': 20}
1  2  {'KEY': 10, 'VALUE': 20}
2  3  {'KEY': 10, 'VALUE': 20}

我遇到了類似的問題,但@jezrael 的方法對我不起作用。 我設法通過從默認字典列表創建一個系列來讓它工作。

Temp_Data_DF['B'] = Temp_Data_DF['B'].fillna(pd.Series([{'KEY':1,'VALUE':2}] * Temp_Data_DF.shape[0]))

暫無
暫無

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

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