如何构建一个循环,将分类列的条目转换为 Pandas 中的数值?

How to build a loop for converting entires of categorical columns to numerical values in Pandas?

我有一个包含多个列的 Pandas 数据框,其中一些列包含分类条目。我正在 'manually' 将这些条目转换为数值。例如,

df['gender'] = pd.Series(df['gender'].factorize()[0])
df['race'] = pd.Series(df['race'].factorize()[0])
df['city'] = pd.Series(df['city'].factorize()[0])
df['state'] = pd.Series(df['state'].factorize()[0])

如果列数很大,这种方法显然效率低下。有没有办法通过在所有列(仅那些具有分类条目的列)上构建循环来做到这一点?

我尝试了以下方法,似乎工作正常:

for column in df.select_dtypes(['category']):
    df[column] = pd.Series(df[column].factorize()[0])

其中 'category' 可以是 'bool'、'object' 等

在变量 cols 中按列使用 DataFrame.apply:

cols = df.select_dtypes(['category']).columns
df[cols] = df[cols].apply(lambda x: x.factorize()[0])

编辑:

您的解决方案应该简化:

for column in df.select_dtypes(['category']):
    df[column] = df[column].factorize()[0]