在数据框的每一列上对不同的列使用apply()并使用不同的功能

时间:2019-09-28 10:00:19

标签: python pandas dataframe apply series

我有一个DataFrame,其列名称为age,salary。也有一些NaN值。我想使用MeanMedian填充这些值。

原始DataFrame


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()中丢失salary

我用过

median()

即使我使用df['age','salary'].apply({'age':lambda row:row.fillna(row.mean()), 'salary':lambda row:row.fillna(row.median()) }) ,它仍显示Key error 'age','salary'

输出结果

axis=1

有人可以告诉我如何正确执行操作以及后台发生了什么事吗?

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

2 个答案:

答案 0 :(得分:1)

运行之前如何计算缺失值?也就是说,计算age的平均值和salary的中位数,然后使用(请注意,对多列进行运算需要使用额外的[]括号)

median_salary = df['salary'].median()
mean_age = df['age'].mean()

df[['age','salary']].apply({'age': lambda r: r.fillna(mean_age), 'salary': lambda r: r.fillna(median_salary)}) 

还请注意,这不会影响数据框,而是创建一个新的数据框,因此,如果要更新列,请使用类似以下内容的东西:

df[['age', 'salary']] = df[['age', 'salary']].apply(...)

或者,在您只想填写缺失值的情况下,最好的解决方案可能是:

r.fillna({'age': mean_age, 'salary': median_salary}, inplace=True)

答案 1 :(得分:1)

根据documentation,最简单的方法是将字典作为Uri参数传递

  

value:标量,字典,系列或DataFrame

     

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

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

value

并给出:

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