如何有条件地替换 pandas 中的NaN值? [英] How to replace NaN values in Pandas conditionally?

查看:82
本文介绍了如何有条件地替换 pandas 中的NaN值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用著名的泰坦尼克号数据集解决我的第一个Kaggle问题.我陷入了数据集中. 我想替换年龄性别明智的NaN值,例如男性"的缺失值应替换为男性"的平均年龄,反之亦然. 虽然我的代码运行正常,但出现如下异常: "SettingWithCopyWarning: 试图在DataFrame的切片副本上设置一个值 请参阅文档中的警告: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self._update_inplace(new_data)"

I'm using famous Titanic dataset for my first Kaggle problem. I'm getting stuck in dataset. I want to replace NaN values of Age gender wise e.g. missing values for 'male' should get replaced by average age of Male and vice-versea. While my code is running fine but getting an exception as following: "SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self._update_inplace(new_data)"

import pandas as pd
df=pd.read_csv('train.csv')
df[(df['Sex']=='male') & (df['Age'].apply(np.isnan))]['Age'].fillna(df[df['Sex']=='male']['Age'].mean(),inplace=True)

推荐答案

import pandas as pd
import numpy as np

df = pd.read_csv('train.csv')
df['Age'].fillna(df.groupby(["Sex"])["Age"].transform(np.mean), inplace=True)


也许这是您正在尝试做的事情?我没有得到任何警告.如有必要,也请查看我的博客文章.

这篇关于如何有条件地替换 pandas 中的NaN值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆