提问人:ericclapp 提问时间:10/24/2023 最后编辑:mozwayericclapp 更新时间:10/24/2023 访问量:17
测试和训练数据具有不同的城市,如何查找和区别,并在测试和训练数据的两列上使用相同的编码系统进行编码
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
问:
我有一个测试集和训练集。他们有一个城市列,一个(火车)有 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
答:
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)
评论