熊猫:get_dummies与分类

sap*_*ico 7 python dummy-data pandas categorical-data

我有一个数据集,其中包含一些带有分类数据的列.

我一直在使用Categorical函数将数字值替换为分类值.

data[column] = pd.Categorical.from_array(data[column]).codes
Run Code Online (Sandbox Code Playgroud)

我最近碰到了pandas.get_dummies函数.这些可以互换吗?使用一个优于另一个有优势吗?

Ale*_*der 5

为什么要将分类数据转换为整数?如果这是你的目标,我不相信你会节省记忆.

df = pd.DataFrame({'cat': pd.Categorical(['a', 'a', 'a', 'b', 'b', 'c'])})
df2 = pd.DataFrame({'cat': [1, 1, 1, 2, 2, 3]})

>>> df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 6 entries, 0 to 5
Data columns (total 1 columns):
cat    6 non-null category
dtypes: category(1)
memory usage: 78.0 bytes

>>> df2.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 6 entries, 0 to 5
Data columns (total 1 columns):
cat    6 non-null int64
dtypes: int64(1)
memory usage: 96.0 bytes
Run Code Online (Sandbox Code Playgroud)

分类代码只是给定类别中唯一项的整数值.相比之下,get_dummies为每个唯一项返回一个新列.列中的值指示记录是否具有该属性.

>>> pd.core.reshape.get_dummies(df)
Out[30]: 
   cat_a  cat_b  cat_c
0      1      0      0
1      1      0      0
2      1      0      0
3      0      1      0
4      0      1      0
5      0      0      1
Run Code Online (Sandbox Code Playgroud)

要直接获取代码,您可以使用:

df['codes'] = [df.cat.codes.to_list()]
Run Code Online (Sandbox Code Playgroud)