转换熊猫数据框中的分类数据

新手上路,请多包涵

我有一个包含这种类型数据的数据框(列太多):

 col1        int64
col2        int64
col3        category
col4        category
col5        category

列看起来像这样:

 Name: col3, dtype: category
Categories (8, object): [B, C, E, G, H, N, S, W]

我想将每一列中的所有值都转换为整数,如下所示:

 [1, 2, 3, 4, 5, 6, 7, 8]

我通过这个为一列解决了这个问题:

 dataframe['c'] = pandas.Categorical.from_array(dataframe.col3).codes

现在我的数据框中有两列 - 旧的 col3 和新的 c 并且需要删除旧列。

这是不好的做法。它有效,但在我的数据框中有太多列,我不想手动进行。

我怎样才能更聪明地做到这一点?

原文由 Gilaztdinov Rustam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 159
2 个回答

首先,要将分类列转换为其数字代码,您可以使用以下命令更轻松地完成此操作: dataframe['c'].cat.codes

此外,可以使用 select_dtypes 自动选择数据框中具有特定数据类型的所有列。这样,您可以对多个自动选择的列应用上述操作。

首先制作一个示例数据框:

 In [75]: df = pd.DataFrame({'col1':[1,2,3,4,5], 'col2':list('abcab'),  'col3':list('ababb')})

In [76]: df['col2'] = df['col2'].astype('category')

In [77]: df['col3'] = df['col3'].astype('category')

In [78]: df.dtypes
Out[78]:
col1       int64
col2    category
col3    category
dtype: object

然后通过使用 select_dtypes 选择列,然后应用 .cat.codes 在这些列中的每一列上,您可以获得以下结果:

 In [80]: cat_columns = df.select_dtypes(['category']).columns

In [81]: cat_columns
Out[81]: Index([u'col2', u'col3'], dtype='object')

In [83]: df[cat_columns] = df[cat_columns].apply(lambda x: x.cat.codes)

In [84]: df
Out[84]:
   col1  col2  col3
0     1     0     0
1     2     1     1
2     3     2     0
3     4     0     1
4     5     1     1

原文由 joris 发布,翻译遵循 CC BY-SA 3.0 许可协议

这对我有用:

 pandas.factorize( ['B', 'C', 'D', 'B'] )[0]

输出:

 [0, 1, 2, 0]

原文由 scottlittle 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题