我有一些具有类别值的对象类型列,例如15-16年,17-23年.....我已将它们转换为category,然后转换为cat.codes。但是,对于第一个0-4年组,编码值从0开始,我希望编码从1开始,即0-4-> 1、5-12->和@@-> NaN 使用字典映射的建议解决方案仍然存在问题。以下是mcve
import pandas as pd
data = ['0-4 Years', '5-12 Years','13-18 Years', '19-21 Years','22-25 Years','26-29 Years','30-35 Years',
'36-41 Years','42-45 Years','46-49 Years','50-55 Years', '56-63 Years']
df = pd.DataFrame(data,columns=['Age'],dtype=object)
df['Age']=df['Age'].astype('category')
cats = dict(enumerate(df['Age'].cat.categories, 2))
df['Age']=df['Age'].cat.codes.map(cats).astype('category')
df['Age']
这是输出,如您所见,如果我更改除0以外的枚举开始,则存在值NaN的问题。其次,该列也未编码:
df['Age']
0 NaN
1 36-41 Years
2 NaN
3 NaN
4 0-4 Years
5 13-18 Years
6 19-21 Years
7 22-25 Years
8 26-29 Years
9 30-35 Years
10 42-45 Years
11 46-49 Years
Name: Age, dtype: category
Categories (9, object): [0-4 Years, 13-18 Years, 19-21 Years, 22-25 Years, ..., 30-35 Years, 36-41 Years, 42-45 Years, 46-49 Years]
如何解决此问题。
答案 0 :(得分:0)
您可以创建自己的字典,以映射代码和类别:
cats = dict(enumerate(df['Age'].cat.categories, 1))
并使用此字典将其映射到数据框中
df['Age'].cat.codes.map(cats).astype('category')