在不同的列上使用 apply() 在数据框的每一列上使用不同的函数
Using apply() on different columns with different functions on each column of a dataframe
我有一个 DataFrame
,其中的列名称为 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() 将各自列的 mean()
和 salary
分别填充为 age
和 median()
。
我用了
df['age','salary'].apply({'age':lambda row:row.fillna(row.mean()), 'salary':lambda row:row.fillna(row.median()) })
即使在我使用 axis=1
之后它仍然显示 Key error 'age','salary'
预期输出
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
如何在 运行 应用之前计算缺失值?也就是说,计算 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)
根据 documentation,您要求的最简单方法是将字典作为 value
参数传递:
value : scalar, dict, Series, or DataFrame
Value to use to fill holes (e.g. 0), alternately a dict/Series/DataFrame of values specifying which value to use for each
index (for a Series) or column (for a DataFrame). Values not in the
dict/Series/DataFrame will not be filled. This value cannot be a list.
在您的情况下,代码将是下一个:
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
我有一个 DataFrame
,其中的列名称为 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() 将各自列的 mean()
和 salary
分别填充为 age
和 median()
。
我用了
df['age','salary'].apply({'age':lambda row:row.fillna(row.mean()), 'salary':lambda row:row.fillna(row.median()) })
即使在我使用 axis=1
Key error 'age','salary'
预期输出
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
如何在 运行 应用之前计算缺失值?也就是说,计算 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)
根据 documentation,您要求的最简单方法是将字典作为 value
参数传递:
value : scalar, dict, Series, or DataFrame
Value to use to fill holes (e.g. 0), alternately a dict/Series/DataFrame of values specifying which value to use for each index (for a Series) or column (for a DataFrame). Values not in the dict/Series/DataFrame will not be filled. This value cannot be a list.
在您的情况下,代码将是下一个:
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