我正在尝试创建一个改变列数据类型的函数。
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,因此调用我创建的函数,但它没有抛出任何错误,同时,它不会更改列的数据类型。
我在代码中哪里出错了?
答案 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