我是 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 任何帮助将不胜感激。
我指的是下面的链接。
最佳答案
你可以通过dictionary
创建的Series
来fillna
:
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/