python - Python 和 Pandas 的问题:将计算列添加到包含来自函数的数据的数据框会提供错误
问题描述
我正在尝试在我的 DataFram“工资”中添加一个计算列:“NetEarnings”。从年收入中减去税款的“净收入”栏;tax 是从我创建的用于计算税款的函数中提取的。由于错误,它不会让我添加这个新列:
“TypeError:不支持的操作数类型 -:'float' 和 'tuple'”
我几乎什么都试过了,不确定我是否在某个地方犯了一个愚蠢的错误。谢谢你的帮助!
代码:
def Tax(AnnualIncome):
if (0 < AnnualIncome) & (AnnualIncome <= 21450):
return (.15 * AnnualIncome)
elif (21450 < AnnualIncome) & (AnnualIncome <= 51900):
return (3215.5 + ((AnnualIncome - 21450) * .28))
else:
return (11,743.5 + ((AnnualIncome - 51900) * .31))
wages['Tax'] = wages['AnnualIncome'].apply(Tax)
# Problem line
wages['NetEarning'] = wages['AnnualIncome'] - wages['Tax']
错误:
TypeError: 不支持的操作数类型 -: 'float' 和 'tuple'
解决方案
除了恩特的回答,
我建议使用 np.where 而不是 apply。Apply 比 for 循环快,但比 apply 慢得多。
一个可能的解决方案是:
np.where(df['AnnualIncome'] <= 21450, (.15 *df['AnnualIncome']),
np.where(df['AnnualIncome'] <= 51900,
(3215.5 + ((df['income']- 21450) * .28)),
(11743.5 + (df['AnnualIncome'] - 51900) * .31)
)
)
推荐阅读
- variables - 是否可以在两个不同的段中定义两个具有相同名称的变量?
- html - 如何将背景图像应用到卡片上,使其被部分裁剪?
- asp.net-core - 在 .netcore3.1 的库输出类型中添加带有 nuget 的 dll 时构建 dll 失败
- c++ - main.c:12:25:警告:格式“%ld”需要“long int”类型的参数,
- php - 为什么 PHP 8 将 42 == " 42" 视为真?
- reactjs - 使用 FBX 加载器更改 React 三纤维中的材料
- javascript - Dart 基数排序实现
- rider - 在 JetBrains Rider 中,有没有办法在不关闭正在运行的项目的情况下运行复合运行/调试配置?
- qt - QML中Window和ApplicationWindow的区别?
- c++ - 带字符串的 C++ 构造函数