将数据框中多列上的相同标签转换为数字

时间:2018-04-16 19:03:02

标签: python-3.x pandas scikit-learn

我有一个数据框:

df =
    A     B     C    D      E
   ---   ---   ---  ---    ---
0  J969  I279  D65   -1    -1
1  C56   A419  I279  C221  -1
2  R068  D65   N009  -1    -1
3  C56  T107  J969  R068  N009

我需要能够对所有列中的标签进行编码。如果标签与数据帧中任何位置的另一个标签(例如,列A行0和列C行3)匹配,则它们必须编码为相同的数字。就这样:

    A     B     C    D      E
   ---   ---   ---  ---    ---
0   0     3     7    -1     -1
1   1     2     6    15     -1
2   4     7     10   -1     -1
3   1     8     0     4     10

我在stackoverflow上的示例中尝试了pandas.factorizepandas.Categorize,Sci​​kit-learn LabelEncoder,但似乎没有任何效果。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用:

m = {d: i for i, d in enumerate(pd.unique(df.as_matrix().flatten()))}
new_df = pd.DataFrame({c: df[c].map(m) for c in df.columns})
  • m是一个映射,根据一些任意顺序将DataFrame中的唯一元素映射到索引。
  • 字典comprehensio遍历列,并根据地图翻译每个列。