我正在尝试使用逻辑运算符&
替换pandas列中的值。使用下面的Label == A
和Value is == np.nan
,我想用X
替换Value。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'Time' : [1,1,2,2,3,3],
'Label' : ['A','B','A','B','A','B'],
'x' : [-2.0,-1.0,-1.0,0.0,0.0,1.0],
'y' : [-2.0,-1.0,-2.0,-1.0,-2.0,-1.0],
'Value' : [np.nan,np.nan,np.nan,np.nan,'Y',np.nan],
})
df.loc[(df['Label'] == 'A') & (df['Value'] == np.nan), 'Value'] = 'X'
预期输出:
Time Label x y Value
0 1 A -2.0 -2.0 X
1 1 B -1.0 -1.0 NaN
2 2 A -1.0 -2.0 X
3 2 B 0.0 -1.0 NaN
4 3 A 0.0 -2.0 Y
5 3 B 1.0 -1.0 NaN
isna
np.nan
的要点是它是NotAN编号。如果你像对待它一样对待它,你就会得到False
。从设计上讲,它甚至不等于自己。
使用Pandasisna
/notna
或isnull
/notnull
df.loc[(df['Label'] == 'A') & (df['Value'].isna()), 'Value'] = 'X'
然后你有
df
Time Label x y Value
0 1 A -2.0 -2.0 X
1 1 B -1.0 -1.0 NaN
2 2 A -1.0 -2.0 X
3 2 B 0.0 -1.0 NaN
4 3 A 0.0 -2.0 Y
5 3 B 1.0 -1.0 NaN