我这样做是为了制作分类变量数字
>>> df = pd.DataFrame({'x':['good', 'bad', 'good', 'great']}, dtype='category')
x
0 good
1 bad
2 good
3 great
Run Code Online (Sandbox Code Playgroud)
如何获取原始值和新值之间的映射?
Joh*_*hnE 48
您可以通过枚举创建字典映射(类似于通过从列表索引创建字典键从列表创建字典):
dict( enumerate(df['x'].cat.categories ) )
# {0: 'bad', 1: 'good', 2: 'great'}
Run Code Online (Sandbox Code Playgroud)
要验证这是否有效,只需打印出如下所示的基础整数代码:
dict( zip( df['x'].cat.codes, df['x'] ) )
# {0: 'bad', 1: 'good', 2: 'great'}
Run Code Online (Sandbox Code Playgroud)
或者从类别到整数到字符串到类别进行往返:
type( df['x'].cat.categories )
# pandas.core.indexes.base.Index
Run Code Online (Sandbox Code Playgroud)
有关pandas分类变量的一般信息,请参阅官方文档
Ara*_*ray 10
Hier 是我基于 Matheus Araujo 的回答的解决方案。
假设我们有一个国家/地区列。首先,您必须将列转换为分类数据类型:
df.country = df.country.astype('category')
Run Code Online (Sandbox Code Playgroud)
以数组的形式获取每个值的代码:
df.country.cat.codes
Run Code Online (Sandbox Code Playgroud)
将代码数组转换回字符串
df.country.cat.categories[df.country.cat.codes]
Run Code Online (Sandbox Code Playgroud)
您还可以传递整数列表
df.country.cat.categories[[0, 1, 2]]
Run Code Online (Sandbox Code Playgroud)
或者单个代码
df.country.cat.categories[0]
Run Code Online (Sandbox Code Playgroud)
如果你运行这个:
df["column_category"].cat.categories.get_loc("item")
它将返回与映射中的“项目”相对应的代码(例如0)。
如果你运行这个:
df["column_category"].cat.categories[0]
它将返回对应于映射位置0的代码值(例如“item”)
| 归档时间: |
|
| 查看次数: |
27848 次 |
| 最近记录: |