使用替换()或python中的fillna()代替熊猫中的列的字典值



我是Python的新手,我正在尝试使用Fillna((功能并面临一些问题。我有一个名为temp_data_df的数据框,它具有下面的两个列:

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((只有一些列

您可以由Series dictionary创建的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

它的工作方式:

IDEA是创建新的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的方法对我不起作用。我通过从默认dict的列表中创建一个系列来使它起作用。

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

最新更新