【问题标题】:Encoding column labels in Pandas for machine learning在 Pandas 中编码列标签以进行机器学习
【发布时间】:2014-10-21 05:39:38
【问题描述】:

我正在研究用于机器学习的汽车评估数据集,数据集是这样的

buying,maint,doors,persons,lug_boot,safety,class
vhigh,vhigh,2,2,small,low,unacc
vhigh,vhigh,2,2,small,med,unacc
vhigh,vhigh,2,2,small,high,unacc
vhigh,vhigh,2,2,med,low,unacc
vhigh,vhigh,2,2,med,med,unacc
vhigh,vhigh,2,2,med,high,unacc

我想将这些字符串按列转换为唯一的枚举整数。我看到 pandas.factorize() 是要走的路,但它只适用于一列。我如何使用一个命令一次性分解数据帧。

我尝试了 lambda 函数,但它不起作用。

df.apply(lambda c:pd.factorize(c),axis=1)

输出:

   0     ([0, 0, 1, 1, 2, 3, 4], [vhigh, 2, small, low,...

    1     ([0, 0, 1, 1, 2, 3, 4], [vhigh, 2, small, med,...

    2     ([0, 0, 1, 1, 2, 3, 4], [vhigh, 2, small, high...

    3     ([0, 0, 1, 1, 2, 3, 4], [vhigh, 2, med, low, u...

    4       ([0, 0, 1, 1, 2, 2, 3], [vhigh, 2, med, unacc])

    5     ([0, 0, 1, 1, 2, 3, 4], [vhigh, 2, med, high, ...

我看到了编码值,但无法从上面的数组中提取出来

【问题讨论】:

  • 你不想改用df.apply(pd.factorize)吗?

标签: python pandas machine-learning scikit-learn


【解决方案1】:

Factorize 返回一个(值,标签)的元组。您只需要 DataFrame 中的值。

In [26]: cols = ['buying', 'maint', 'lug_boot', 'safety', 'class']

In [27]: df[cols].apply(lambda x: pd.factorize(x)[0])
Out[27]: 
   buying  maint  lug_boot  safety  class
0       0      0         0       0      0
1       0      0         0       1      0
2       0      0         0       2      0
3       0      0         1       0      0
4       0      0         1       1      0
5       0      0         1       2      0

然后将其连接到数字数据。

提醒一句:这意味着“低”安全性和“高”安全性与“中”安全性的距离相同。使用pd.get_dummies 可能会更好:

In [37]: dummies = []

In [38]: for col in cols:
   ....:     dummies.append(pd.get_dummies(df[col]))
   ....:     

In [39]: pd.concat(dummies, axis=1)
Out[39]: 
   vhigh  vhigh  med  small  high  low  med  unacc
0      1      1    0      1     0    1    0      1
1      1      1    0      1     0    0    1      1
2      1      1    0      1     1    0    0      1
3      1      1    1      0     0    1    0      1
4      1      1    1      0     0    0    1      1
5      1      1    1      0     1    0    0      1

get_dummies 有一些可选参数来控制命名,您可能需要这些参数。

【讨论】:

  • 非常有用 :) 非常感谢。
猜你喜欢
  • 2020-04-16
  • 2018-08-26
  • 2021-07-20
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 2015-10-08
相关资源
最近更新 更多