首页 > 解决方案 > 使用 if 条件编码 pandas 列

问题描述

我正在尝试将我的数据框中的 weekday_name 列(str)编码为 int。但我得到了错误系列的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

有人可以帮我理解为什么会出现这个错误以及解决方案是什么

我正在尝试的代码是:

def weekday_df(df):

    if (data_semi['Weekday_Name'] == 'Monday'):
        return 1
    elif (data_semi['Weekday_Name'] == 'Tuesday'):
        return 2
    elif (data_semi['Weekday_Name'] == 'Wednesday'):
        return 3
    elif (data_semi['Weekday_Name'] == 'Thursday'):
        return 4
    elif (data_semi['Weekday_Name'] == 'Friday'):
        return 5
    elif (data_semi['Weekday_Name'] == 'Saturday'):
        return 6
    elif (data_semi['Weekday_Name'] == 'Sunday'):
        return 7
    

data_semi['Weekday_Name'] = data_semi.apply(weekday_df, axis = 1)

数据框如下所示 在此处输入图像描述

标签: pythonpandasif-statementencoding

解决方案


df在您的解决方案中更改从传递给函数的变量中选择值:

data_semi['Weekday_Name'] == 'Monday'

至:

df['Weekday_Name'] == 'Monday'

全部一起:

def weekday_df(df):

    if (df['Weekday_Name'] == 'Monday'):
        return 1
    elif (df['Weekday_Name'] == 'Tuesday'):
        return 2
    elif (df['Weekday_Name'] == 'Wednesday'):
        return 3
    elif (df['Weekday_Name'] == 'Thursday'):
        return 4
    elif (df['Weekday_Name'] == 'Friday'):
        return 5
    elif (df['Weekday_Name'] == 'Saturday'):
        return 6
    elif (df['Weekday_Name'] == 'Sunday'):
        return 7

更好/更快的是Series.map字典使用:

d = {'Monday':1, 'Tuesday':2,'Wednesday':3,'Thursday':4,'Friday':5,'Saturday':6,'Sunday':7}

data_semi['Weekday_Name'] = data_semi['Weekday_Name'].map(d)

推荐阅读