【问题标题】:How to iterate over a DataFrame for a selected coulmn using python?python - 如何使用python迭代选定列的DataFrame?
【发布时间】:2020-05-25 20:02:31
【问题描述】:

假设我有这样的示例代码

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

更新 A:

嗯,简而言之,我正在使用来自 kaggle.com 的数据集,即。 泰坦尼克号:灾难中的机器学习,在该数据集中,我想引入一个具有类似条件的新列。

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

【问题讨论】:

    标签: python-3.x dataframe machine-learning kaggle


    【解决方案1】:

    在函数中遇到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 answer 有其他替代解决方案。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-06-16
      • 2018-10-13
      • 1970-01-01
      • 2011-06-09
      • 2020-05-21
      • 2019-01-21
      • 2019-07-31
      • 1970-01-01
      • 2016-06-24
      相关资源
      最近更新 更多