如何根据其他列的某些值替换列的nan值

Posted

技术标签:

【中文标题】如何根据其他列的某些值替换列的nan值【英文标题】:How to replace nan values of a column based on certain values of other column 【发布时间】:2020-01-04 19:09:49 【问题描述】:

我有两列,col1 表示受教育程度,col2 表示他们的工作。 col2 有一些 nan 值,所以我想根据第 1 列的值替换这个 nan 值。 例如如果 col1='bachelor' 那么 col2 必须是 ='teacher' if col1='high school' then col2='actor'.. 以此类推,我有 7 个不同的 col1 值。

我尝试过创建这样的函数:

def rep_nan(x):
    if x['col1']=='bachelor':
        x['col2']='teacher'
    elif x['col1']=='blabla':
        x['col2']='blabla'
    .....
    elif x['col1']='high school':
        x['col2']='actor'

然后我申请了我的数据集:

df.apply(rep_nan,axis=1)

但我得到一个无列

错误在哪里?或者我该怎么做?

【问题讨论】:

How to replace NaN values where the other columns meet a certain criteria?的可能重复 【参考方案1】:

你可以在这里制作字典:

rep_nan = 
    'bachelor': 'tacher',
    'blabla': 'blabla',
    'high school': 'actor'

然后我们可以将 nan 值替换为:

df.loc[df['col2'].isnull(), 'col2'] = df[df['col2'].isnull()]['col1'].replace(rep_nan)

例如:

>>> df
          col1   col2
0     bachelor   None
1     bachelor  clown
2       blabla   None
3  high school   None
>>> df.loc[df['col2'].isnull(), 'col2'] = df[df['col2'].isnull()]['col1'].replace(rep_nan)
>>> df
          col1    col2
0     bachelor  tacher
1     bachelor   clown
2       blabla  blabla
3  high school   actor

【讨论】:

以上是关于如何根据其他列的某些值替换列的nan值的主要内容,如果未能解决你的问题,请参考以下文章

如何在Matlab中用另一个不同大小数组的对应值替换表格列的某些元素?

如何用python中其他数据帧中的条目替换一个数据帧中列的丢失条目?

用组平均值替换 NaN 值

根据规则将数据框中的值替换为其他值

用数据框的NaN替换特定范围的值

如何根据其他 2 列选择 1 列的最大值和最小值?