熊猫数据框-系列的真值不明确

时间:2020-05-22 16:41:00

标签: python pandas dataframe

我有以下代码。

import pandas as pd
data = {'income_bracket':['<=50k', '<=75k', '<=125k', '>1(25k']}
df = pd.DataFrame(data)
def label_fix(label):
    if df['income_bracket']== '<=50K':
        return 0
    else:
        return 1
df['income_bracket']=df['income_bracket'].apply(label_fix)

运行代码时,出现以下错误。

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我非常感谢您的帮助。 谢谢

2 个答案:

答案 0 :(得分:0)

您的错误是您不使用传递给label_fix的参数,但实际上您不应该在Pandas中使用apply,这实在太慢了。

相反,以矢量形式进行操作:

df['income_bracket'] = np.where(df['income_bracket'] == '<=50K', 0, 1)

如果您有两种以上的情况,可以使用np.select()代替np.where()

答案 1 :(得分:0)

import pandas as pd
data = {'income_bracket':['<=50k', '<=75k', '<=125k', '>1(25k']}
df = pd.DataFrame(data)
def label_fix(label):
    if label== '<=50K':
         return 0
    else:
         return 1
df['income_bracket']=df['income_bracket'].apply(label_fix)

这是您的代码段的更正版本。您正在做的是调用df ['income_bracket']这是一个系列。相反,您应该在apply()中使用作为参数传递给label_fix()的'label'。要将'<= 50K'更改为'<= 50k',否则所有值均为1