测试和训练数据具有不同的城市,如何查找和区别,并在测试和训练数据的两列上使用相同的编码系统进行编码

Test and Train Data have different cities, how to find and differences and encode using the same coding system on both columns from test & train data

提问人:ericclapp 提问时间:10/24/2023 最后编辑:mozwayericclapp 更新时间:10/24/2023 访问量:17

问:

我有一个测试集和训练集。他们有一个城市列,一个(火车)有 290 个独特的,测试有 30 个。我希望有重叠,即伦敦、布里斯托尔在两组,但格洛斯特可能在一组而不是另一组。

我还想将这些城市编码为两个集合之间相关的数值,因此伦敦应该在测试和训练中编码为 1。

我已经查看了 LabelEncoder,但不知道如何让两个集合对它们共享的城市使用相同的编号。

LabelEncoder 工作正常,但两组之间没有关联。

以前:

df_train['City']
'London' , 'Bristol', 'Paris', 'Rome', 'London', 'Worcester'

df_test['City']
'Paris', 'Rome','Rome','London', 'Gloucester'

输出:

df_train['City']
1 2 3 4 1 6

df_test['City']
3 4 4 1 7
pandas 机器学习 编码 线性回归 分类数据

评论


答:

1赞 mozway 10/24/2023 #1

可以使用常见的 CategoricalDtype

df_train = pd.DataFrame({'City': ['London' , 'Bristol', 'Paris', 'Rome', 'London', 'Worcester']})
df_test = pd.DataFrame({'City': ['Paris', 'Rome','Rome','London', 'Gloucester']})

cat = pd.CategoricalDtype(pd.concat([df_train['City'], df_test['City']]).unique())

df_train['code'] = df_train['City'].astype(cat).cat.codes
df_test['code'] = df_test['City'].astype(cat).cat.codes

输出:

# df_train
        City  code
0     London     0
1    Bristol     1
2      Paris     2
3       Rome     3
4     London     0
5  Worcester     4

# df_test
         City  code
0       Paris     2
1        Rome     3
2        Rome     3
3      London     0
4  Gloucester     5

或者只是将城市转换为分类:

df_train['City'] = df_train['City'].astype(cat)
df_test['City'] = df_test['City'].astype(cat)