首页 > 解决方案 > 在数据框的每一列上使用具有不同功能的不同列上的 apply()

问题描述

我有一个DataFrame列 name age,salary。也有一些NaN价值观。我想使用Meanand填充这些值Median

原始数据框


age salary
0   20.0    NaN
1   45.0    22323.0
2   NaN 598454.0
3   32.0    NaN
4   NaN 48454.0

使用 apply()用它们各自列agemean()和填充缺失。salarymedian()

我用了

df['age','salary'].apply({'age':lambda row:row.fillna(row.mean()), 'salary':lambda row:row.fillna(row.median()) })

Key error 'age','salary'即使在我使用后它也会显示axis=1

预期输出

    age salary
0   20.000000   48454.0
1   45.000000   22323.0
2   32.333333   598454.0
3   32.000000   48454.0
4   32.333333   48454.0

有人可以告诉我如何正确地做到这一点以及后台发生了什么吗?

请告诉是否还有其他方法。我正在从头开始学习 Pandas

标签: pythonpandasdataframeapplyseries

解决方案


根据文档,您要求的最简单方法是将字典作为value参数传递:

值:标量、字典、系列或数据帧

用于填充孔的值(例如 0),或者是值的 dict/Series/DataFrame,指定用于每个索引(对于 Series)或列(对于 DataFrame)的值。不在 dict/Series/DataFrame 中的值将不会被填充。此值不能是列表。

在您的情况下,代码将是下一个:

df.fillna(value={'age': df.age.mean(), 'salary': df.salary.median()}, inplace=True)

并给出:

         age    salary
0  20.000000   48454.0
1  32.333333   22323.0
2  45.000000  598454.0
3  32.333333   48454.0
4  32.000000   48454.0
5  32.333333   48454.0

推荐阅读