首页 > 解决方案 > 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 值。

标签: pythonpandastuplesnanfillna

解决方案


使用Series.fillnatuple 中的选择值,使用索引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

C或从with创建 DataFrame以DataFrame.pop供使用和删除列,设置新列名称并传递给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

推荐阅读