如何将带有列表值的熊猫列连接到一个列表中?

Posted

技术标签:

【中文标题】如何将带有列表值的熊猫列连接到一个列表中?【英文标题】:How to concatenate pandas column with list values into one list? 【发布时间】:2017-08-12 02:25:24 【问题描述】:

我有一个数据框,其中一列在每个索引处都有一个列表。我想将这些列表连接成一个列表。我正在使用

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]

对 cme​​ts 的回应: 我认为您的列是字符串

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]

【讨论】:

谢谢。第一种方法最简单,但是如果我想连接几个第一个列表而不是列中的所有列表,我该如何使用它?我已经尝试过 np. concatenate() 但我得到了与 ['[1,2,3...]'] 相同的东西。 @SarwatFatimaM 你可以做几件事。尝试df.col1.iloc[:3].sum() 仅合并前 3 个。 是的,我已经尝试过了: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() 但同样的问题。 我不确定我的 pandas 列是如何转换为 str 类型的,因为我自己没有这样做。不过,我正在从 excel 表中加载数据。 @SarwatFatimaM 啊,我很确定这些是字符串而不是列表。我将使用可能的解决方案更新帖子。希望它有所帮助。【参考方案2】:

如果您想展平列表,这是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

【讨论】:

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

以上是关于如何将带有列表值的熊猫列连接到一个列表中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将熊猫中的一列列表转换为Python中唯一值的稀疏DataFrame [重复]

如何将包含数组中的值的熊猫列扩展到多列?

如何在熊猫数据框中使用列表作为值?

如何在熊猫数据框中使用列表作为值?

如何将每行列表中的元素与熊猫匹配

熊猫数据框可以有列表的dtype吗?