如何将列表值的pandas列连接到一个列表中?

时间:2017-03-20 17:14:17

标签: python list 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列与列表值连接到一个列表中?请帮助,我正在敲打它几个小时。

2 个答案:

答案 0 :(得分:5)

考虑数据框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]

答案 1 :(得分:1)

如果您想要展平列表,这是pythonic方式:

将pandas导入为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