我有一个具有此类数据的数据框(列过多):
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列,需要删除旧列。
col3
c
那是不好的做法。它是可行的,但是在我的数据框中有很多列,我不想手动进行。
pythonic如何巧妙地实现呢?
首先,要将“分类”列转换为其数字代码,可以使用以下命令更轻松地做到这一点dataframe['c'].cat.codes。 此外,可以使用来自动选择数据框中具有特定dtype的所有列select_dtypes。这样,您可以将以上操作应用于多个自动选择的列。
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这些列中的每一个,您可以获得以下结果:
.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