如何在 Python 中为顺序数据编码虚拟变量,以便始终保持相同的顺序?
How to encode dummy variables in Python for sequential data such that the same order is maintained always?
确实是一个简单的问题,我有一个太大的数据集无法保存到内存中,因此必须加载它然后按顺序对其执行机器学习。我的特征之一是分类特征,我想将其转换为虚拟变量,但我有两个问题:
1) 拼接过程中并非所有类别都存在。所以我想添加额外的类别,即使它们没有出现在当前切片中
2) 列必须保持与之前相同的顺序。
这是问题的一个例子:
In[1]: import pandas as pd
splice1 = pd.Series(list('bdcccb'))
Out[1]: 0 b
1 d
2 c
3 c
4 c
5 b
dtype: object
In[2]: splice2 = pd.Series(list('accd'))
Out[2]: 0 a
1 c
2 c
3 d
dtype: object
In[3]: splice1_dummy = pd.get_dummies(splice1)
Out[3]: b c d
0 1 0 0
1 0 0 1
2 0 1 0
3 0 1 0
4 0 1 0
5 1 0 0
In[4]: splice2_dummy = pd.get_dummies(splice2)
Out[4]: a c d
0 1 0 0
1 0 1 0
2 0 1 0
3 0 0 1
编辑:如何处理 N-1 规则。必须删除一个虚拟变量,但要删除哪个?每个新的拼接都会包含不同的分类变量。
因此,如果您按照所需的确切顺序传递类别,get_dummies 将无论如何维护它。该代码显示了它是如何完成的。
In[1]: from pandas.api.types import CategoricalDtype
splice1 = pd.Series(list('bdcccb'))
splice1 = splice1.astype(CategoricalDtype(categories=['a','c','b','d']))
splice2 = pd.Series(list('accd'))
splice2 = splice2.astype(CategoricalDtype(categories=['a','c','b','d']))
In[2]: splice1_dummy = pd.get_dummies(splice1)
Out[2]: a c b d
0 0 0 1 0
1 0 0 0 1
2 0 1 0 0
3 0 1 0 0
4 0 1 0 0
5 0 0 1 0
In[3]: splice2_dummy = pd.get_dummies(splice2)
Out[3]: a c b d
0 1 0 0 0
1 0 1 0 0
2 0 1 0 0
3 0 0 0 1
虽然我还是没有解决掉哪个变量的问题
确实是一个简单的问题,我有一个太大的数据集无法保存到内存中,因此必须加载它然后按顺序对其执行机器学习。我的特征之一是分类特征,我想将其转换为虚拟变量,但我有两个问题:
1) 拼接过程中并非所有类别都存在。所以我想添加额外的类别,即使它们没有出现在当前切片中
2) 列必须保持与之前相同的顺序。
这是问题的一个例子:
In[1]: import pandas as pd
splice1 = pd.Series(list('bdcccb'))
Out[1]: 0 b
1 d
2 c
3 c
4 c
5 b
dtype: object
In[2]: splice2 = pd.Series(list('accd'))
Out[2]: 0 a
1 c
2 c
3 d
dtype: object
In[3]: splice1_dummy = pd.get_dummies(splice1)
Out[3]: b c d
0 1 0 0
1 0 0 1
2 0 1 0
3 0 1 0
4 0 1 0
5 1 0 0
In[4]: splice2_dummy = pd.get_dummies(splice2)
Out[4]: a c d
0 1 0 0
1 0 1 0
2 0 1 0
3 0 0 1
编辑:如何处理 N-1 规则。必须删除一个虚拟变量,但要删除哪个?每个新的拼接都会包含不同的分类变量。
因此,如果您按照所需的确切顺序传递类别,get_dummies 将无论如何维护它。该代码显示了它是如何完成的。
In[1]: from pandas.api.types import CategoricalDtype
splice1 = pd.Series(list('bdcccb'))
splice1 = splice1.astype(CategoricalDtype(categories=['a','c','b','d']))
splice2 = pd.Series(list('accd'))
splice2 = splice2.astype(CategoricalDtype(categories=['a','c','b','d']))
In[2]: splice1_dummy = pd.get_dummies(splice1)
Out[2]: a c b d
0 0 0 1 0
1 0 0 0 1
2 0 1 0 0
3 0 1 0 0
4 0 1 0 0
5 0 0 1 0
In[3]: splice2_dummy = pd.get_dummies(splice2)
Out[3]: a c b d
0 1 0 0 0
1 0 1 0 0
2 0 1 0 0
3 0 0 0 1
虽然我还是没有解决掉哪个变量的问题