如何将带有列表值的熊猫列连接到一个列表中?
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]
对 cmets 的回应: 我认为您的列是字符串
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'......]'].以上是关于如何将带有列表值的熊猫列连接到一个列表中?的主要内容,如果未能解决你的问题,请参考以下文章