首页 > 解决方案 > 如何使用 python 为选定的列迭代 DataFrame?

问题描述

假设我有这样的示例代码

_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')

更新一:

好吧,简而言之,我正在使用来自 kaggle.com 的数据集,即。Titanic: Machine Learning from Disaster在那个数据集中,我想介绍一个新的列,条件是这样的。

如果男性且年龄为 NaN,则插入男性的 mean() 年龄而不是 NaN;如果女性且年龄为 NaN,则插入女性总年龄的 mean() 而不是 NaN

标签: python-3.xdataframemachine-learningkaggle

解决方案


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'))

这个答案有其他替代解决方案。

希望这可以帮助。


推荐阅读