如何根据另一列的 NaN 值在 pandas 数据框中设置值?
How set values in pandas dataframe based on NaN values of another column?
我有一个名为 df
的数据框,原始形状为 (4361, 15)
。 agefm
列的某些值是 NaN。看看:
> df[df.agefm.isnull() == True].agefm.shape
(2282,)
然后我创建新列并将其所有值设置为 0:
df['nevermarr'] = 0
所以我想将 nevermarr
值设置为 1,那么在那一行 agefm
是 Nan:
df[df.agefm.isnull() == True].nevermarr = 1
没有变化:
> df['nevermarr'].sum()
0
我做错了什么?
最好使用numpy.where
:
df['nevermarr'] = np.where(df.agefm.isnull(), 1, 0)
print (df)
agefm nevermarr
0 NaN 1
1 5.0 0
2 6.0 0
或使用loc
,==True
可省略:
df.loc[df.agefm.isnull(), 'nevermarr'] = 1
或mask
:
df['nevermarr'] = df.nevermarr.mask(df.agefm.isnull(), 1)
print (df)
agefm nevermarr
0 NaN 1
1 5.0 2
2 6.0 3
样本:
import pandas as pd
import numpy as np
df = pd.DataFrame({'nevermarr':[7,2,3],
'agefm':[np.nan,5,6]})
print (df)
agefm nevermarr
0 NaN 7
1 5.0 2
2 6.0 3
df.loc[df.agefm.isnull(), 'nevermarr'] = 1
print (df)
agefm nevermarr
0 NaN 1
1 5.0 2
2 6.0 3
我有一个名为 df
的数据框,原始形状为 (4361, 15)
。 agefm
列的某些值是 NaN。看看:
> df[df.agefm.isnull() == True].agefm.shape
(2282,)
然后我创建新列并将其所有值设置为 0:
df['nevermarr'] = 0
所以我想将 nevermarr
值设置为 1,那么在那一行 agefm
是 Nan:
df[df.agefm.isnull() == True].nevermarr = 1
没有变化:
> df['nevermarr'].sum()
0
我做错了什么?
最好使用numpy.where
:
df['nevermarr'] = np.where(df.agefm.isnull(), 1, 0)
print (df)
agefm nevermarr
0 NaN 1
1 5.0 0
2 6.0 0
或使用loc
,==True
可省略:
df.loc[df.agefm.isnull(), 'nevermarr'] = 1
或mask
:
df['nevermarr'] = df.nevermarr.mask(df.agefm.isnull(), 1)
print (df)
agefm nevermarr
0 NaN 1
1 5.0 2
2 6.0 3
样本:
import pandas as pd
import numpy as np
df = pd.DataFrame({'nevermarr':[7,2,3],
'agefm':[np.nan,5,6]})
print (df)
agefm nevermarr
0 NaN 7
1 5.0 2
2 6.0 3
df.loc[df.agefm.isnull(), 'nevermarr'] = 1
print (df)
agefm nevermarr
0 NaN 1
1 5.0 2
2 6.0 3