【问题标题】:Process data to categorical and enumeric将数据处理为分类和数字
【发布时间】:2019-09-30 21:10:56
【问题描述】:

我是 Python 新手。我有一个如下的数据框:

d = {'Categorical': ['A','B','C','A'], 
      'Order':      ['First','Second', 'First','Second'], 
      'Numerical':  [20,22,21,25]} 
df = pd.DataFrame(data=d)

我应该处理这个框架以获得以下内容:

Categorical Order   Numerical
1           1       20
2           2       22
3           1       21
1           2       25

这里的窍门如下:

Python 应该理解 Categorical 列是分类的。而Order 列在顺序很重要的地方是枚举的。

考虑到这里的 dtype,我应该做什么编码?

【问题讨论】:

  • pd.factorize(df.Categorical)
  • 您能否提供更多关于列Order 的信息。只是['First', 'Second'] 还是您在某个地方有特定的命令?
  • 你可以认为它只是['First', 'Second']。我有多少独特的价值观并不重要。原始数据类型是str,我知道这些字符串的顺序。

标签: python pandas type-conversion enumeration categorical-data


【解决方案1】:

您正在寻找方法.map()

首先,您需要一个将类别“翻译”为值的字典:

order_dict = {'First':1,'Second':2}

然后在列上调用 map

df['Order_value'] = df.Order.map(order_dict)


Out[6]: 
  Categorical   Order  Numerical  Order_value
0           A   First         20       1
1           B  Second         22       2
2           C   First         21       1
3           A  Second         25       2

通过'Categorical' 列,您可以使用ord()

df['Categorical_value'] = df.Categorical.apply(ord) - 64

Out[7]: 
  Categorical   Order  Numerical  Order_value  Categorical__value
0           A   First         20       1         1
1           B  Second         22       2         2
2           C   First         21       1         3
3           A  Second         25       2         1

【讨论】:

  • 谢谢马克。好吧,让我解释一下你的确认:当我只使用ord() 时,1 和 2 之间没有基于价值的区别,对吧?但是map() 增加了它的价值?
  • 当您将dict 用于您的'Order' 列时,您需要.map。使用您的“分类”列 - 诸如“A”、“B”之类的字符,您可以使用 python func ord() 将 char 转换为 int (ord('A') = 65),因此您不需要 dict {'a ':1,'b':2}
猜你喜欢
  • 2017-08-23
  • 2013-02-20
  • 2013-06-10
  • 2022-09-27
  • 2017-12-03
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
相关资源
最近更新 更多