首页 > 解决方案 > 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'

标签: pythonpandasfunctiondataframe

解决方案


除了恩特的回答,

我建议使用 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)
                ) 
        )

推荐阅读