当多列包含相同的值时,如何对大型数据帧进行一次热编码?
How to one hot encode a large dataframe when multiple columns contain the same values?
标题基本上抓住了我的问题。
我有一个数据框,多个列具有诸如 [0,1]
之类的值,如果我要对 df 进行一次热编码,我将有多个具有相同名称的列。
繁琐的解决方案是手动创建唯一列,但我有 58 个分类列,因此效率似乎不高。
我不确定这是否有帮助,但这是我的数据框的 head()
。
x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 ... z217 z218 z219 z220 z221 z222 subject phase state output
0 0 0 1 -300.361218 0.886360 -2.590886 225.001899 0.006204 0.000037 -0.000013 ... 0.005242 0.024971 -1017.620978 -382.850838 -48.275711 -2.040336 A 3 B 0
1 0 0 1 -297.126090 0.622211 -3.960940 220.179017 0.006167 -0.000014 -0.000003 ... 0.001722 0.023595 91.229094 24.802230 1.783950 0.022620 A 3 C 0
2 0 0 1 -236.460253 0.423640 -12.656341 139.453445 0.006276 -0.000028 0.000022 ... -0.010894 -0.036318 -188.232347 -17.474861 -1.005571 -0.021628 A 3 B 0
3 0 0 1 33.411458 2.854415 -1.962432 3.208911 0.009752 -0.000273 -0.000024 ... -0.034184 -0.047734 185.122907 -549.282067 542.193381 -178.049926 A 3 A 0
4 0 0 1 -118.125214 2.009809 -3.291637 34.874176 0.007598 0.000001 -0.000022 ... 0.001963 0.004084 35.207794 -78.143166 57.084208 -13.700212 A 4 C 0
您可能已经在使用 pandas.get_dummies
?如果不是,此函数将分类列转换为多个指标列(一个热编码)。
此函数有一个 'prefix' 参数,它专门针对您的情况而存在。这可以是一个字符串列表(长度必须等于数据框中的列数)。不过,在您的情况下,您可以将其设为字典,您可以在其中将列名映射到前缀。所以,像这样:
pd.get_dummies(df, prefix={'x3': 'x3', 'x4': 'x4'})
这将增加像 x3_0, x3_1 ... x4_0, x4_1 ...
这样的列
您可以读取数据并首先获取分类变量的所有唯一值的列表。然后,您可以在您的唯一值列表中放置一个热编码器对象(如 sklearn.preprocessing.CategoricalEncoder)。
此方法还有助于训练测试框架或当您以块的形式读取数据时。
我创建了一个 python 模块,它可以自行完成所有这些工作。您可以在这个 GitHub 存储库中找到它 - dummyPy
有关此的简短教程 - How to One Hot Encode Categorical Variables in Python?
标题基本上抓住了我的问题。
我有一个数据框,多个列具有诸如 [0,1]
之类的值,如果我要对 df 进行一次热编码,我将有多个具有相同名称的列。
繁琐的解决方案是手动创建唯一列,但我有 58 个分类列,因此效率似乎不高。
我不确定这是否有帮助,但这是我的数据框的 head()
。
x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 ... z217 z218 z219 z220 z221 z222 subject phase state output
0 0 0 1 -300.361218 0.886360 -2.590886 225.001899 0.006204 0.000037 -0.000013 ... 0.005242 0.024971 -1017.620978 -382.850838 -48.275711 -2.040336 A 3 B 0
1 0 0 1 -297.126090 0.622211 -3.960940 220.179017 0.006167 -0.000014 -0.000003 ... 0.001722 0.023595 91.229094 24.802230 1.783950 0.022620 A 3 C 0
2 0 0 1 -236.460253 0.423640 -12.656341 139.453445 0.006276 -0.000028 0.000022 ... -0.010894 -0.036318 -188.232347 -17.474861 -1.005571 -0.021628 A 3 B 0
3 0 0 1 33.411458 2.854415 -1.962432 3.208911 0.009752 -0.000273 -0.000024 ... -0.034184 -0.047734 185.122907 -549.282067 542.193381 -178.049926 A 3 A 0
4 0 0 1 -118.125214 2.009809 -3.291637 34.874176 0.007598 0.000001 -0.000022 ... 0.001963 0.004084 35.207794 -78.143166 57.084208 -13.700212 A 4 C 0
您可能已经在使用 pandas.get_dummies
?如果不是,此函数将分类列转换为多个指标列(一个热编码)。
此函数有一个 'prefix' 参数,它专门针对您的情况而存在。这可以是一个字符串列表(长度必须等于数据框中的列数)。不过,在您的情况下,您可以将其设为字典,您可以在其中将列名映射到前缀。所以,像这样:
pd.get_dummies(df, prefix={'x3': 'x3', 'x4': 'x4'})
这将增加像 x3_0, x3_1 ... x4_0, x4_1 ...
您可以读取数据并首先获取分类变量的所有唯一值的列表。然后,您可以在您的唯一值列表中放置一个热编码器对象(如 sklearn.preprocessing.CategoricalEncoder)。
此方法还有助于训练测试框架或当您以块的形式读取数据时。 我创建了一个 python 模块,它可以自行完成所有这些工作。您可以在这个 GitHub 存储库中找到它 - dummyPy
有关此的简短教程 - How to One Hot Encode Categorical Variables in Python?