如何在pandas dataframe中对一列进行独热编码?

4

我正在尝试对数据框中的一列进行独热编码。

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

但我得到了以下提示:

DeprecationWarning: 在0.17版本中,将1d数组作为数据传递已被弃用, 并且在0.19版本中会引发ValueError错误。

这个问题有解决方法吗?


minitable = enc.fit_transform(df[["ids"]]) 这段代码是否能够正常运行,没有任何警告信息? - EdChum
1个回答

5

我认为你可以使用 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

编辑:

如果输入的是包含列表的列,则首先转换为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

我需要转换为字符串。能否使用整数而不进行强制转换? - Bob
问题是使用 print (df.ids.str.get_dummies().astype(str)) 吗? - jezrael
当ids是整数列表时,上述代码将无法工作。 - Bob
虽然这在StackOverflow上已经被讨论过了,但get_dummies并不是执行编码的最佳实践,因为它不能在未知数据上保留编码本身的记忆。不同的数据可能以相同的方式进行编码,这违背了编码的初衷。 - gented

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接