Python Pandas用元组中的NAN替换值

问题描述

获得以下数据框:

   A    B
 Temp1  1
 Temp2  2
 NaN    NaN
 NaN    4

由于A和B相互关联,因此我可以创建新列,在其中计算A和B的nan值并形成一个元组

 A      B       C
Temp1   1   (1,Temp1)
Temp2   2   (2,Temp2)
NaN    NaN  (3,Temp3)
NaN     4   (4,Temp4)

现在,我必须删除列C并填充与列对应的Nan值。

解决方法

Series.fillna用于元组中的选择值,方法是使用str进行索引,最后删除C列:

#if values are not in tuples  
#df.C = df.C.str.strip('()').str.split(',').apply(tuple)

df.A = df.A.fillna(df.C.str[1]) 
df.B = df.B.fillna(df.C.str[0]) 
df = df.drop('C',axis=1)
print (df)
       A  B
0  Temp1  1
1  Temp2  2
2  Temp3  3
3  Temp4  4

或者使用DataFrame.popC创建DataFrame以供使用并删除列,设置新列名称并传递给DataFrame.fillna

#if values are not in tuples  
#df.C = df.C.str.strip('()').str.split(',').apply(tuple)

df[['A','B']] = df[['A','B']].fillna(pd.DataFrame(df.pop('C').tolist(),columns=['B','A']))
print (df)
       A  B
0  Temp1  1
1  Temp2  2
2  Temp3  3
3  Temp4  4