使用apply函数创建一个在熊猫中具有舍入值的新列

问题描述 投票:1回答:1

我的数据框如下:

name  |  salary 
Tom   |   10200 
Kate  |          
Mi    |   32311 

关于薪水和round_salary,kate的值为'',我将其值替换为'',因此它在单元格中什么都没有显示。

问题:

我想基于将四舍五入到最接近的10,000来创建新的薪水列。

结果如下所示

name  |  salary | round_salary
Tom   |   10200 |  10000
Kate  |         |  
Mi    |   32311 |  30000

我的代码如下所示:

def round_income(salary):
    if '' in salary:
        return ''
    else: 
        return salary.round(decimals = -4)

income.apply(lambda x: round_salary(x['income']), axis=1)

输出错误是:

KeyError: ('salary', 'occurred at index 0')

有人知道如何解决吗?我发现map或apply函数可以解决它,谢谢任何人的事先帮助。 〜

python pandas pandas-apply
1个回答
1
投票

解决方案,如果没有缺失值,但非数字为空值:

income['salary'] = (pd.to_numeric(income['salary'], errors='coerce')
                      .round(decimals = -4)
                      .fillna(''))
print (income)
   name salary
0   Tom  10000
1  Kate       
2    Mi  20000

缺少值的解决方案-salary列中的所有数据均为数字:

income['salary'] = income['salary'].round(decimals = -4).astype('Int64')
print (income)
   name  salary
0   Tom   10000
1  Kate     NaN
2    Mi   20000
© www.soinside.com 2019 - 2024. All rights reserved.