【问题标题】:How do I one-hot encode one column of a pandas dataframe?如何对 pandas 数据帧的一列进行一次热编码?
【发布时间】:2017-05-02 07:49:10
【问题描述】:

我正在尝试对数据帧的一列进行一次热编码。

enc = OneHotEncoder()
minitable = enc.fit_transform(df["ids"])

但我得到了

DeprecationWarning:将一维数组作为数据传递在 0.17 中已弃用 并将在 0.19 中引发 ValueError。

有解决办法吗?

【问题讨论】:

  • minitable = enc.fit_transform(df[["ids"]]) 在没有警告的情况下工作吗?

标签: python pandas scikit-learn


【解决方案1】:

我觉得你可以用get_dummies:

df = pd.DataFrame({'ids':['a','b','c']})

print (df)
  ids
0   a
1   b
2   c

print (df.ids.str.get_dummies())
   a  b  c
0  1  0  0
1  0  1  0
2  0  0  1

编辑:

如果输入是带有lists 的列,首先转换为str,通过strip 删除[] 并调用get_dummies

df = pd.DataFrame({'ids':[[0,4,5],[4,7,8],[5,1,2]]})

print(df)
         ids
0  [0, 4, 5]
1  [4, 7, 8]
2  [5, 1, 2]

print (df.ids.astype(str).str.strip('[]').str.get_dummies(', '))
   0  1  2  4  5  7  8
0  1  0  0  1  1  0  0
1  0  0  0  1  0  1  1
2  0  1  1  0  1  0  0

【讨论】:

  • 我需要转换为字符串。可以用整数而不是强制转换来完成吗?
  • 有问题使用print (df.ids.str.get_dummies().astype(str)) 吗?
  • 当 ids 是整数列表时,上面的代码将不起作用
  • 尽管 StackOverflow 上到处都是,get_dummies 并不是执行编码的最佳实践,因为它不会将编码本身的内存保留在看不见的数据上。不同的数据可能以相同的方式编码,这违背了编码的目的。
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 2021-11-16
  • 2018-04-28
  • 2018-03-21
  • 2018-08-17
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
相关资源
最近更新 更多