sac*_*ruk 51 python series binning pandas categorical-data
假设我有一个数据框,其国家/地区如下:
cc | temp
US | 37.0
CA | 12.0
US | 35.0
AU | 20.0
Run Code Online (Sandbox Code Playgroud)
我知道有一个pd.get_dummies函数可以将这些国家/地区转换为"单热编码".但是,我希望将它们转换为索引,以便我得到它cc_index = [1,2,1,3].
我假设有一种比使用get_dummies和numpy where子句更快的方法,如下所示:
[np.where(x) for x in df.cc.get_dummies().values]
使用'因子'在R中这样做有点容易,所以我希望大熊猫有类似的东西.
Joh*_*nck 102
首先,更改列的类型:
df.cc = pd.Categorical(df.cc)
Run Code Online (Sandbox Code Playgroud)
现在数据看起来很相似,但是分类存储.要捕获类别代码:
df['code'] = df.cc.cat.codes
Run Code Online (Sandbox Code Playgroud)
现在你有:
cc temp code
0 US 37.0 2
1 CA 12.0 1
2 US 35.0 2
3 AU 20.0 0
Run Code Online (Sandbox Code Playgroud)
如果您不想修改DataFrame,只需获取代码:
df.cc.astype('category').cat.codes
Run Code Online (Sandbox Code Playgroud)
或者使用分类列作为索引:
df2 = pd.DataFrame(df.temp)
df2.index = pd.CategoricalIndex(df.cc)
Run Code Online (Sandbox Code Playgroud)
jpp*_*jpp 18
如果您只希望将系列转换为整数标识符,则可以使用pd.factorize.
请注意,此解决方案pd.Categorical不会按字母顺序排序.所以第一个国家将被分配0.如果您想从头开始1,可以添加常量:
df['code'] = pd.factorize(df['cc'])[0] + 1
print(df)
cc temp code
0 US 37.0 1
1 CA 12.0 2
2 US 35.0 1
3 AU 20.0 3
Run Code Online (Sandbox Code Playgroud)
如果您希望按字母顺序排序,请指定sort=True:
df['code'] = pd.factorize(df['cc'], sort=True)[0] + 1
Run Code Online (Sandbox Code Playgroud)
小智 13
一行代码:
df[['cc']] = df[['cc']].apply(lambda col:pd.Categorical(col).codes)
Run Code Online (Sandbox Code Playgroud)
如果您有list_of_columns:
df[list_of_columns] = df[list_of_columns].apply(lambda col:pd.Categorical(col).codes)
Run Code Online (Sandbox Code Playgroud)
此外,如果您想保留您的NaN值,您可以应用替换:
df[['cc']] = df[['cc']].apply(lambda col:pd.Categorical(col).codes).replace(-1,np.nan)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是sklearn库,则可以使用LabelEncoder。像一样pd.Categorical,输入字符串在编码之前按字母顺序排序。
from sklearn.preprocessing import LabelEncoder
LE = LabelEncoder()
df['code'] = LE.fit_transform(df['cc'])
print(df)
cc temp code
0 US 37.0 2
1 CA 12.0 1
2 US 35.0 2
3 AU 20.0 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49602 次 |
| 最近记录: |