【问题标题】:How set values in pandas dataframe based on NaN values of another column?如何根据另一列的 NaN 值设置 pandas 数据框中的值?
【发布时间】:2016-10-24 02:01:19
【问题描述】:

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

我做错了什么?

【问题讨论】:

  • 当您执行df[df.agefm.isnull() == True].nevermarr = 1 时,您可以删除== True,因为它已经是isnull 的输出。然后,如果它没有改变,我猜它一定是因为这个方法创建了你的数据框的副本。然后你修改一个在行尾消失的临时数据框,而不是你的原始数据框(但我不确定)。无论如何,Jezrael 的回答一如既往的好。
  • @ysearka 这似乎是一个很好的解释))

标签: python python-2.7 pandas nan


【解决方案1】:

最好使用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

【讨论】:

猜你喜欢
  • 2021-04-10
  • 2021-06-29
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
  • 2022-12-09
相关资源
最近更新 更多