Python 熊猫一次热编码中未知分类值的处理
我有一个熊猫数据帧,在这个数据帧上我使用Python 熊猫一次热编码中未知分类值的处理,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据帧,在这个数据帧上我使用get\u dummies方法进行一次热编码 下面是示例代码- import pandas as pd X = pd.DataFrame( ['a','a,b','a,c'], columns = ['category']) X.head() category 0 a 1 a,b 2 a,c 下面是我如何做一个热编码 X_transformed = pd.concat([X, X['category'].str.ge
get\u dummies
方法进行一次热编码
下面是示例代码-
import pandas as pd
X = pd.DataFrame( ['a','a,b','a,c'], columns = ['category'])
X.head()
category
0 a
1 a,b
2 a,c
下面是我如何做一个热编码
X_transformed = pd.concat([X, X['category'].str.get_dummies(sep=',')], axis=1)
X_transformed.head()
category a b c
0 a 1 0 0
1 a,b 1 1 0
2 a,c 1 0 1
问题是,当我得到一个具有未知分类值的记录时,我不知道如何最好地处理它-
y = pd.DataFrame(['a','d'], columns = ['category'])
y.head()
category
0 a
1 d
如果我在这个新的数据帧上再次执行获取虚拟对象
,那么我会得到如下结果
y_transformed = pd.concat([y, y['category'].str.get_dummies(sep=',')], axis=1)
y_transformed.head()
category a d
0 a 1 0
1 d 0 1
而我的预期产出是
category a b c
0 a 1 0 0
1 d 0 0 0
因为类别d以前从未出现过,所以我想通过将列a、b、c
的所有标志设置为0来忽略它
如何在熊猫中实现这一点?在轴=1
上使用填充值=0
:
y_transformed = y_transformed.reindex(X_transformed.columns, axis=1, fill_value=0)
结果:
category a b c
0 a 1 0 0
1 d 0 0 0
谢谢Shubham的回答。它起作用了。我有两个问题-首先-原始列名必须是
X_transformed.columns
列表的一部分?第二,reindex做什么?是的,原始列需要是X\u transformed
的一部分reindex
使用可选填充逻辑将数据帧的索引与新索引相一致,在这种情况下,我们使用了fill\u value=0