2017-03-20 99 views
1

我有一个数据框与其列之一在每个索引有一个列表。我想将这些列表连接成一个列表。我使用如何将pandas列与列表值连接成一个列表?

ids = df.loc[0:index, 'User IDs'].values.tolist() 

然而,这导致 ['[1,2,3,4......]']它是一个字符串。不知何故,我列表中的每个值都是str。我曾尝试转换使用list(),literal_eval(),但它不起作用。 list()将列表内的每个元素转换成一个字符串,例如从[12,13,14...]['['1'',','2',','1',',','3'......]']

如何将pandas列与列表值连接成一个列表?请帮忙,我在这上面敲了几个小时。

回答

1

考虑数据框df

df = pd.DataFrame(dict(col1=[[1, 2, 3]] * 2)) 
print(df) 

     col1 
0 [1, 2, 3] 
1 [1, 2, 3] 

pandas简单的答案

df.col1.sum() 

[1, 2, 3, 1, 2, 3] 

numpy.concatenate

np.concatenate(df.col1) 

array([1, 2, 3, 1, 2, 3]) 

chain

from itertools import chain 

list(chain(*df.col1)) 

[1, 2, 3, 1, 2, 3] 

回应评论:
我觉得你的列是字符串

from ast import literal_eval 

df.col1 = df.col1.apply(literal_eval) 

相反,如果你的列是看起来像列表

df = pd.DataFrame(dict(col1=['[1, 2, 3]'] * 2)) 
print(df) # will look the same 

     col1 
0 [1, 2, 3] 
1 [1, 2, 3] 

但是字符串值pd.Series.sum呢不一样的工作。

df.col1.sum() 

'[1, 2, 3][1, 2, 3]' 

我们需要,如果他们是文字来评估字符串,然后sum

df.col1.apply(literal_eval).sum() 

[1, 2, 3, 1, 2, 3] 
+0

谢谢。第一种方法最简单,但如果我想连接几个第一个列表而不是列中的所有列表,我该如何使用它?我已经尝试过np。 concatenate()但我得到了与['[1,2,3 ...]']相同的东西。 – SarwatFatimaM

+0

@SarwatFatimaM你可以做几件事情。尝试'df.col1.iloc [:3] .sum()'结合第一个3. – piRSquared

+0

是的,我已经试过了:'ids = pd.DataFrame(GCM.loc [0:2,'User IDs '])' 'ids = uninstall_ids ['User IDs']。sum()'但问题是它的类型是str,它在程序中进一步产生了问题。如果我使用list()或tolist(),那么它将[12,13,14,15]转换为['['1',',','2',',','1',', ' '3' ...]'。我需要这个列表,因为我使用集合中的counter()来比较程序中稍后的两个列表。我也尝试过'df.col1.iloc [:3] .sum()'但是同样的问题。 – SarwatFatimaM

0

如果要拼合名单,这是pythonic办法做到这一点:

进口大熊猫作为pd

df = pd.DataFrame({'A': [[1,2,3], [4,5,6]]}) 

a = df['A'].tolist() 
a = [i for j in a for i in j] 
print a 
+0

但是,这会导致类似[[','1','2',',','','4','2',',','','4','9' ,'2',',','','1'.........]']。 – SarwatFatimaM

相关问题