Python-定义一个将数据帧作为输入的函数

时间:2018-04-10 13:33:25

标签: python python-3.x pandas dataframe

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

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,因此调用我创建的函数,但它没有抛出任何错误,同时,它不会更改列的数据类型。

我在代码中哪里出错了?

1 个答案:

答案 0 :(得分:2)

您无需在此处使用pd.DataFrame.apply

相反,您可以直接访问分类列的cat.codes属性。此外,您可以使用pd.DataFrame.pipe通过函数运行(" 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