2016-11-15 101 views
0

我有一个表中的大熊猫DF,由两列。转换在大熊猫DF一列排在列表

|product_id |Bigram 
    --------------------------------------------------------------------- 
    |111   |[('111','987'),('987','741'),('12','111')] 
    |987   |[('987','1232'),('1232','987') 
    |654   |('654,12'),('12,324'),('24,465')] 
    |321   |[('321','741')] 
    |324   |[('324','654'),('654','862'),('862','324')] 
    |123   |[('123','98'),('12','123')] 

我想从Bigram列中创建一个列表L,使得每行和所有行中的所有值都被附加到列表中。例如

。我的输出应该是。

L = [(['987','1232'],['1232','987'],['654,12'],['12,324'],['24,465'], 
['321','741'],............['123','98'],['12','123'])] 

有没有办法做到这一点?使用一些for循环?

回答

0

我想你需要tolist

L = df.Bigram.tolist() 

或者:

L = list(df.Bigram) 

编辑:

问题是Bigram列中的值是字符串,所以首先需要通过转换成元组的listast

from ast import literal_eval 
from itertools import chain 

df.Bigram = df.Bigram.apply(literal_eval) 
print (df) 
    product_id        Bigram 
0   111 [(111, 987), (987, 741), (12, 111)] 
1   987   [(987, 1232), (1232, 987)] 
2   654  [(654, 12), (12, 324), (24, 465)] 
3   321       [(321, 741)] 
4   324 [(324, 654), (654, 862), (862, 324)] 
5   123    [(123, 98), (12, 123)] 

L = [tuple([list(x) for x in chain.from_iterable(df.Bigram)])] 
print (L) 
[(['111', '987'], ['987', '741'], ['12', '111'], 
    ['987', '1232'], ['1232', '987'], ['654', '12'], 
    ['12', '324'], ['24', '465'], ['321', '741'], 
    ['324', '654'], ['654', '862'], ['862', '324'], 
    ['123', '98'], ['12', '123'])] 
+0

此代码给我'L = [[( '987', '1232'),( '1232', '987'),( '654,12'])],[( '987','1232 '),('1232','987')]',列表内的列表,但看到我的输出是不同的 – Shubham

+0

@jezrael:很好的编辑。主席先生,请您一次看看这个。 [jezrael问题(http://stackoverflow.com/questions/40594210/create-a-bigram-from-a-column-in-pandas-df) – Shubham

+0

@jezrael它不是working.i'ts打破每个数字,并给予我输出。 'L = [([ '' '],[' 9 '],[' 8 '],[' 7 '],[' ''],[”, '],[' 1 '],[' 2'],['2'],['''],[''('',['''],['1'],['2'],['3' ] ......依此类推# – Shubham