python - 当并非所有类别都存在于多个特征和数据集中时的虚拟变量

标签 python pandas machine-learning dummy-variable

我想询问 this question 的分机号,其中讨论了向缺失的类添加标签,以确保虚拟对象正确编码为空白。

有没有一种方法可以在多组数据中自动执行此操作,并使标签在两者之间自动同步? (即用于测试和训练集)。 IE。相同的列,但每列中表示的数据类别不同?

例如: 假设我有以下两个数据框:

df1 = pd.DataFrame.from_items([('col1', list('abc')), ('col2', list('123'))])
df2 = pd.DataFrame.from_items([('col1', list('bcd')), ('col2', list('234'))])   

df1
   col1   col2 
1   a     1
2   b     2    
3   c     3
df2
   col1    col2
1   b      2
2   c      3
3   d      4

我想要:

df1
    col1_a col1_b col1_c col1_d col2_1 col2_2 col2_3 col2_4
1   1      0      0      0      1      0      0      0      
2   0      1      0      0      0      1      0      0
3   0      0      1      0      0      0      1      0

df2
    col1_a col1_b col1_c col1_d col2_1 col2_2 col2_3 col2_4
1   0      1      0      0      0      1      0      0
2   0      0      1      0      0      0      1      0
3   0      0      0      1      0      0      0      1

无需提前指定
col1_labels = ['a', 'b', 'c', 'd'], col2_labels = ['1', '2', '3', '4']

我可以同时对许多列系统地执行此操作吗?我正在想象一个函数,当传入两个或多个数据帧时(假设所有列都相同):

  1. 读取 pandas 数据框中的哪些列是类别
  2. 找出总体标签是什么
  3. 然后为每列提供类别标签 这看起来对吗?有更好的办法吗?

最佳答案

我认为你需要reindex如果两个 Dataframe 中的分类列名称相同,则通过所有列的并集:

print (df1)  
  df1
1   a
2   b
3   c

print (df2)
  df1
1   b
2   c
3   d

df1 = pd.get_dummies(df1)
df2 = pd.get_dummies(df2)

union = df1.columns | df2.columns
df1 = df1.reindex(columns=union, fill_value=0)
df2 = df2.reindex(columns=union, fill_value=0)
print (df1)
   df1_a  df1_b  df1_c  df1_d
1      1      0      0      0
2      0      1      0      0
3      0      0      1      0
print (df2)
   df1_a  df1_b  df1_c  df1_d
1      0      1      0      0
2      0      0      1      0
3      0      0      0      1

关于python - 当并非所有类别都存在于多个特征和数据集中时的虚拟变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49219465/

相关文章:

python - 如何将 Pandas 中的一列扩展为多列?

Python:如何迭代数据框中的一系列列,检查特定值并将列名称存储在列表中

matlab - 使用 Ransac 的仿射模型

java - 如何为 spark mllib kmeans 聚类算法格式化数据?

machine-learning - "MultiBoxTarget"始终返回零数组

python - Python遍历灰度图像中的连接组件

python - 如何使用 nans 对 pandas 列进行 zscore 标准化?

python - 运行时有程序报告集市修订号

python - "()"语法在python中是什么意思

python - 如果遇到 NaN 值,将值移到 Python DataFrame 的顶部