Python 在不同的列上使用apply(),在数据帧的每列上使用不同的函数

Python 在不同的列上使用apply(),在数据帧的每列上使用不同的函数,python,pandas,dataframe,apply,series,Python,Pandas,Dataframe,Apply,Series,我有一个DataFrame,其中有列nameage,salary。还有一些NaN值。我想用Mean和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()将缺少的age用mean()和salary分别用median()填充各自列的age。 我曾经 df['age','salary'].apply({'

我有一个
DataFrame
,其中有列name
age,salary
。还有一些
NaN
值。我想用
Mean
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()将缺少的
age
mean()
salary
分别用
median()
填充各自列的
age

我曾经

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

即使在我使用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

在运行apply之前计算缺失的值怎么样?也就是说,计算
年龄
的平均值和
工资
的中位数,然后使用(注意在多个列上操作所需的额外
[]
括号)

还请注意,这不会影响数据帧,而是会创建一个新的数据帧,因此,如果要更新列,请使用以下方法:

df[['age', 'salary']] = df[['age', 'salary']].apply(...)
或者,在您只想填写缺失值的情况下,最好的解决方案可能是:

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

在运行apply之前计算缺少的值如何?也就是说,计算
年龄
的平均值和
工资
的中位数,然后使用(注意在多个列上操作所需的额外
[]
括号)

还请注意,这不会影响数据帧,而是会创建一个新的数据帧,因此,如果要更新列,请使用以下方法:

df[['age', 'salary']] = df[['age', 'salary']].apply(...)
或者,在您只想填写缺失值的情况下,最好的解决方案可能是:

r.fillna({'age': mean_age, 'salary': median_salary}, inplace=True)
根据,最简单的方法是将字典作为
参数传递:

值:标量、dict、序列或数据帧


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

用于填充孔的值(例如0),或者是一个dict/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
根据,最简单的方法是将字典作为
参数传递:

值:标量、dict、序列或数据帧


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

用于填充孔的值(例如0),或者是一个dict/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

嘿,德斯瓦尔,你能发布一个你的数据和预期输出的例子吗?@datanovel,当然。我已经更新了。请看一看Hey Deshwal,你能发布一个你的数据和预期输出的示例吗?@DataNovel,当然。我已经更新了。请看一看谢谢!这是你刚刚提供的一些有用的知识。谢谢你!你刚才提供了一些有用的知识。