在机器学习中对于有序的类别型变量可以不采用onehot编码,直接使用有序数字代替即可,这个目的可以在pandas中使用map方法实现。
import pandas as pd
创建数据框
raw_data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'],
'age': [42, 52, 36, 24, 73],
'city': ['San Francisco', 'Baltimore', 'Miami', 'Douglas', 'Boston']}
df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age', 'city'])
df
first_name | last_name | age | city | |
---|---|---|---|---|
0 | Jason | Miller | 42 | San Francisco |
1 | Molly | Jacobson | 52 | Baltimore |
2 | Tina | Ali | 36 | Miami |
3 | Jake | Milner | 24 | Douglas |
4 | Amy | Cooze | 73 | Boston |
在这里假定是有序的,将城市名映射为数字,当然也可是是其它字符中:
创建用于map的字典
city_to_state = { 'San Francisco' : 0,
'Baltimore' : 1,
'Miami' : 2,
'Douglas' : 3,
'Boston' : 4}
城市名map到洲名,保存到state变量中:
df['state'] = df['city'].map(city_to_state)
df
first_name | last_name | age | city | state | |
---|---|---|---|---|---|
0 | Jason | Miller | 42 | San Francisco | 0 |
1 | Molly | Jacobson | 52 | Baltimore | 1 |
2 | Tina | Ali | 36 | Miami | 2 |
3 | Jake | Milner | 24 | Douglas | 3 |
4 | Amy | Cooze | 73 | Boston | 4 |