【问题标题】:Encoding column pandas using if condition使用 if 条件对 pandas 列进行编码
【发布时间】:2021-01-14 17:47:09
【问题描述】:

我正在尝试将数据框中的 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)

数据框如下所示

【问题讨论】:

    标签: python pandas if-statement encoding


    【解决方案1】:

    在您的解决方案中更改从传递给函数的变量 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)
    

    【讨论】:

      猜你喜欢
      • 2017-10-24
      • 2021-10-01
      • 2021-07-28
      • 1970-01-01
      • 2019-04-04
      • 2014-06-30
      • 2019-05-11
      • 2023-02-02
      • 2013-12-02
      相关资源
      最近更新 更多