CountTokenizing一个字段,变成列

时间:2016-10-11 19:38:53

标签: python pandas numpy scikit-learn

我处理的数据看起来像这样:

ID      PATH         GROUP  
11937   MM-YT-UJ-OO  GT  
11938   YT-RY-LM     TQ  
11939   XX-XX-OT     DX  

我想将PATH列标记为n-gram,然后将它们单独编码到自己的列中,这样我就会得到类似的结果:

ID     GROUP   MM  YT  UJ  OO  RY  LM  XX  OT  MM-YT  YT-UH ...  
11937  GT      1   1   1   1   0   0   0   0   1      1

我也可以使用计数代币而不是单热,所以11939在XX列中会有2而不是1,但我可以使用它们。

我可以使用scikitlearn CountVectorizer非常轻松地对列进行标记,但是我必须同时处理IDGROUP字段。是否有标准的方法来执行此操作或任何人都发现的最佳实践?

2 个答案:

答案 0 :(得分:1)

解决方案:

string ="aabcC"
count = 0
while count < len(string) - 1:
    if string[count].lower() == string[count + 1].lower():
        print "Characters " + string[count] + " and " + string[count + 1] + " are repeating."
    count += 1

将ID和GROUP列隔离为索引。然后将字符串转换为单元格项

df.set_index(['ID', 'GROUP'], inplace=True)
pd.get_dummies(df.PATH.str.split('-', expand=True).stack())\
              .groupby(level=[0,1]).sum().reset_index()

将他们放入一列数据

df.PATH.str.split('-', expand=True)
Out[37]: 
              0   1   2     3
ID    GROUP                  
11937 GT     MM  YT  UJ    OO
11938 TQ     YT  RY  LM  None
11939 DX     XX  XX  OT  None

df.PATH.str.split('-', expand=True).stack() Out[38]: ID GROUP 11937 GT 0 MM 1 YT 2 UJ 3 OO 11938 TQ 0 YT 1 RY 2 LM 11939 DX 0 XX 1 XX 2 OT 将计数器作为跨行分布的列

get_dummies

按每个ID的数据分组,GROUP(索引中的级别0和1)将行汇总在一起,每个元组有一行。最后重置索引以将ID和GROUP列作为常规列返回。

答案 1 :(得分:0)

也许你可以尝试类似的东西。

self.cursor.execute("PRAGMA table_info('%s')" % table_name)