Python Pandas:适合未知变量的LabelEncoding

时间:2018-12-06 14:08:43

标签: pandas dataframe encoding sklearn-pandas

  • 嗨,我有一个充满字符串的数据框,我想对这些字符串进行编码并存储其相应的代码。
  • 我想在一列上生成这些代码,并适合另一列。
  • 当我将这些代码放在其他列中却没有在我的培训列中看到的字符串时,我想为此创建另一个唯一值。
  • 我尝试了LabelEncoding函数,但是它给以前看不见的字符串带来了错误。

例如a have数据框:

 col1  col2
  a     a
  b     b
  c     e
  d     f

在第一列上训练了LabelEncoding之后,我得到的是这样的:

 col1  col2
  1     a
  2     b
  3     e
  4     f

在第二列上创建的代码适合之后,我想要这样的东西:

 col1  col2
  1     1
  2     2
  3     5
  4     6

最简单的方法是什么。谢谢。

2 个答案:

答案 0 :(得分:0)

通过复制OP帖子中的示例来创建cmake_minimum_required(VERSION 3.0.0) project(MYAPPLICATION VERSION 0.1.0) add_library(MYAPPLICATION STATIC DriverFolder/Src/myDriver.c ApplicationFolder/Src/myApplication.c) # Tell CMake where the header files are located target_include_directories(MYAPPLICATION PUBLIC DriverFolder/Inc ApplicationFolder/Inc) 数据框,如下所示。

df

打印时其值如下:

df=pd.read_clipboard()

能否请您尝试以下。我在这里只给出了1st 6个字母,以防万一,在实际的Input_file中有它们。

    col1    col2
0    a       a 
1    b       b 
2    c       e 
3    d       f 

输出如下。

dict1 = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
df.applymap(lambda s: dict1.get(s) if s in dict1 else s)

答案 1 :(得分:0)

您可以使用pd.factorize进行编码:

v, k = pd.factorize(sorted(df.stack().unique()))

m = dict(zip(k.tolist(), (v+1).tolist()))

df.replace(m)

输出:

   col1  col2
0     1     1
1     2     2
2     3     5
3     4     6

我认为真正的诀窍是将col1和col2堆叠在一起,然后将两个列表的值编码为一个。

le = LabelEncoder()
le.fit(df.stack())