【问题标题】:Python- defining a function that takes data-frame as an InputPython-定义一个将数据框作为输入的函数
【发布时间】:2018-04-10 13:33:25
【问题描述】:

我正在尝试创建一个更改列数据类型的函数。

def ChangeDatatypes(df):
    df['Name'] = df['Name'] .astype('category')
    df['Character'] = df['Character'] .astype('category')
    cat_columns = df.select_dtypes(['category']).columns
    df[cat_columns] = df[cat_columns].apply(lambda x: x.cat.codes)
    return(df)

Actual_Dataframe = ChangeDatatypes(Actual_DataFrame) ' 调用那个函数

我想更改 Actual_Dataframe 并因此调用我创建的函数,但它没有抛出任何错误,同时它也没有更改列的数据类型。

我的代码哪里出错了?

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    你不需要在这里使用pd.DataFrame.apply

    相反,您可以直接访问分类列的cat.codes 属性。此外,您可以使用pd.DataFrame.pipe 通过函数运行(“管道”)您的数据框。

    以下是经过验证的示例。

    def ChangeDatatypes(df):
        df['Name'] = df['Name'].astype('category').cat.codes
        df['Character'] = df['Character'].astype('category').cat.codes
        return df
    
    df = pd.DataFrame({'Name': ['a', 'b', 'c', 'd'],
                       'Character': ['e', 'f', 'g', 'h']})
    
    df = df.pipe(ChangeDatatypes)
    
    print(df)
    
    #    Character  Name
    # 0          0     0
    # 1          1     1
    # 2          2     2
    # 3          3     3
    
    print(df.dtypes)
    
    # Character    int8
    # Name         int8
    # dtype: object
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-28
      • 2020-09-17
      • 2020-12-14
      • 2022-07-04
      • 1970-01-01
      • 2016-11-13
      • 2014-03-03
      • 2021-12-30
      相关资源
      最近更新 更多