如何根据另一列的NaN值设置pandas数据帧中的值?

2024-09-28 22:33:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为df的数据帧,其原始形状为(4361, 15)agefm列的某些值为NaN。你看:

> df[df.agefm.isnull() == True].agefm.shape
(2282,)

然后创建新列并将其所有值设置为0:

^{pr2}$

那么{cd3>中的{cd3}值将设置为:

df[df.agefm.isnull() == True].nevermarr = 1

什么都没改变:

> df['nevermarr'].sum()
0

我做错什么了?在


Tags: 数据truedfnan形状sumshapeisnull
1条回答
网友
1楼 · 发布于 2024-09-28 22:33:54

最好是使用^{}

df['nevermarr'] = np.where(df.agefm.isnull(), 1, 0)
print (df)
   agefm  nevermarr
0    NaN          1
1    5.0          0
2    6.0          0

或者使用^{}==True可以省略:

^{pr2}$

^{}

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

相关问题 更多 >