使用 Python 中的 Replace() 或 fillna() 将 Pandas 中的列的 NAN 替换为字典值

sin*_*dhu 6 python pandas

我是 python 新手,我正在尝试使用 fillna() 功能并面临一些问题。我有一个名为 Temp_Data_DF 的 DataFrame,它有两列,如下所示:

Temp_Data_DF:
A  B
1  NAN
2  NAN
3  {'KEY':1,'VALUE':2}
Run Code Online (Sandbox Code Playgroud)

我想用 Dict 值替换所有 NAN ,结果数据帧应该是这样的:

Temp_Data_DF:
A  B
1  {'KEY':1,'VALUE':2}
2  {'KEY':1,'VALUE':2}
3  {'KEY':1,'VALUE':2}
Run Code Online (Sandbox Code Playgroud)

我尝试了下面的代码:

Bvalue = {'KEY':1,'VALUE':2}
Temp_Data_DF['B']=Temp_Data_DF['B'].fillna(Bvalue)
Run Code Online (Sandbox Code Playgroud)

但它并没有用所需的值替换 NAN 任何帮助将不胜感激。

我指的是下面的链接。

链接:Pandas dataframe fillna() 仅放置了一些列

jez*_*ael 5

您可以fillna通过Series以下方式创建dictionary

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}
Run Code Online (Sandbox Code Playgroud)

细节

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
Run Code Online (Sandbox Code Playgroud)

它是如何工作的:

想法是创建Series与字典填充的原始系列相同大小的新产品,因此如果fillna被另一个使用Series它效果很好。

另一个解决方案:想法是 use NaN != NaN,所以如果 useif-elseSeries.apply替换:

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}
Run Code Online (Sandbox Code Playgroud)