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
,其中有列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({'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,当然。我已经更新了。请看一看谢谢!这是你刚刚提供的一些有用的知识。谢谢你!你刚才提供了一些有用的知识。