Skip to main content
 首页 » 编程设计

python之如何根据另一列的 NaN 值在 pandas 数据框中设置值

2025年05月04日28insus

我有一个名为 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