Python Pandas 用元组中的 NAN 替换值
Python Pandas Replace Values with NAN from Tuple
得到以下数据框:
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 值。
通过使用 str
进行索引,在元组中使用 Series.fillna
和 select 值,最后删除 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.pop
for use and remove column, set new columns names and pass to DataFrame.fillna
从 C
创建 DataFrame:
#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
得到以下数据框:
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 值。
通过使用 str
进行索引,在元组中使用 Series.fillna
和 select 值,最后删除 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.pop
for use and remove column, set new columns names and pass to DataFrame.fillna
从 C
创建 DataFrame:
#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