如何使用python为选定的同伴迭代DataFrame?

问题描述 投票:0回答:1

假设我有这样的示例代码

_d=pd.DataFrame([[1,2,3],[4,np.nan,6],[np.nan,np.nan,8]],columns=['x','y','z'])

现在,我具有一个检查值并根据场景指定期望值的功能

def handling_nan(_d):
    if _d['x']==1.0:
        return 100
    else:
        return _d

当我使用此代码时,在下面的代码中,

_result=_d.apply(lambda x:handling_nan(x))
_result

我遇到错误

KeyError:('x','发生在索引x')

UPDATE A:

简而言之,我正在使用来自kaggle.com的数据集,即Titanic:从灾难中学习机器,在该数据集中,我想引入一个新列,其条件是这样的。

如果男性且年龄为NaN,则插入男性的mean()年龄而不是NaN,如果女性且年龄为NaN,然后​​插入女性总年龄的均值()代替NaN

python-3.x dataframe machine-learning kaggle
1个回答
0
投票
在函数中遇到

KeyError,因为数据帧上的apply()方法采用axis=0。这意味着该函数将应用于每一列而不是每一行。要消除此错误,需要将apply()调用替换为:

_result=_d.apply(lambda x:handling_nan(x), axis=1)

查看编辑,问题是用数据集中的分组均值替换NaNs

这可以使用fillna()transform()方法如下进行:


l = [["M", 30], ["M", 45], ["M", None], ["F", 76], ["F", 23], ["F", None]]
df = pd.DataFrame(l, columns=["sex", "age"])
df['age'] = df['age'].fillna(df.groupby("sex")['age'].transform('mean'))

[This答案还有其他替代解决方案。

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.