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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...