我有一个数据框,其中一个列在每个索引处都有一个列表。我想将这些列表连接到一个列表中。我正在使用
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列与列表值连接到一个列表中?请帮助,我正在敲打它几个小时。
答案 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