“应用函数不会替换数据框中的值”

2024-10-01 19:33:06 发布

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

我试图用一些相应群体的中值来代替年龄的nan值。我用groupby制作了一个名为groupby的表。这是我的代码:

def fillAges(row, grouped_median):
    return grouped_median.loc[row['Sex'], row['Class'], row['Title']]['Age'] 


df['Age'] = df.apply(lambda x : fillAges(x, grouped_median) if np.isnan(x['Age']) else x['Age'], axis=1)

df

如果我只打印这一部分:

^{pr2}$

这些值是正确的,但是一旦我看到df,nan值就不会被替换。谢谢你的帮助。谢谢您!在

编辑:正如纳撒尼尔所说,这个代码运行得很好。事实上,df是一个大的数据帧,由训练和测试数据集连接而成,并有一个额外的标志列,即“train”或“test”。我就是这么做的:

df[df['flag']=='train']['Age'] = df[df['flag']=='train'].apply(lambda x : fillAges(x, grouped_median) if np.isnan(x['Age']) else x['Age'], axis=1)

但这不起作用。这会给我一个警告,但我认为这只是一个警告,并不意味着它实际上没有做任何事情试图在数据帧的切片副本上设置值。请尝试使用.loc[row_indexer,col_indexer]=value,请参阅文档中的注意事项:pandas.pydata.org/pandas-文档/稳定/

我需要做的就是从左边删除[df['flag']==train']部分。在

我还是不知道为什么这个方法不起作用。如果有人有洞察力,我很乐意知道。谢谢你


Tags: lambdadfageifnptrainnanloc
1条回答
网友
1楼 · 发布于 2024-10-01 19:33:06

您必须格式化函数以获取一个序列并返回一个序列,而不是只对序列的一个元素进行操作。我在下面添加了一个函数series_op,它应该可以为您完成这项工作。在

def fillAges(row, grouped_median):
    return grouped_median.loc[row['Sex'], row['Class'], row['Title']]['Age'] 

def series_op(x):
    x['Age'] = fillAges(x, grouped_median) if np.isnan(x['Age']) else x['Age']
    return x


corrected_df = df.apply(series_op, axis=1)

我没有你的数据,也没有grouped_median所以我不能复制你的问题。有了一些我捏造的测试数据,我可以让它正常工作,也可以让你的工作正常。在

相关问题 更多 >

    热门问题