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

disho6za  于 2022-12-28  发布在  Python
关注(0)|答案(2)|浏览(165)

我是python的新手,我尝试使用fillna()函数,遇到了一些问题。我有一个名为Temp_Data_DF的DataFrame,它有两列,如下所示:

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

我想将所有NAN替换为Dict值,结果 Dataframe 应如下所示:

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

kwvwclae

kwvwclae1#

您可以按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,大小与字典填充的原始系列相同,所以如果使用fillna的另一个Series,它的工作很好。
另一种解决方案:想法是使用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}
wgmfuz8q

wgmfuz8q2#

我也遇到过类似的问题,但是@jezrael的方法对我不起作用,我设法从默认的dict列表中创建一个系列来解决这个问题。

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

相关问题