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

标签 python pandas

我是 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() only some columns in place

最佳答案

你可以通过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 相同,因此如果由另一个 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}

关于python - 在 Python 中使用 Replace() 或 fillna() 将 NAN 替换为 Pandas 中列的字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50015771/

相关文章:

python - 并非所有类别都存在时的虚拟变量

python - 在 matplotlib 中使用透明度和多种颜色显示 3D 条形图

python - 物体检测 Action

python - 以持久的方式存储 Python 的模拟结果?

python - 如何使用 python 比较两个不同的 csv 文件?

python - 如何在 python pandas 中处理零日期时间?

python - pandas 中的高效扩展 OLS

python - 如何使用 python 从 config.ini 文件中的选项获取嵌套值

Python 将声音设备导入为 sd (ImportError : No module name sounddevice)

python - 并行化 python 代码中的内存共享