【问题标题】: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 列与列表值连接到一个列表中?请帮忙,我已经敲了几个小时。

【问题讨论】:

    标签: python list 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'......]'].
    猜你喜欢
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2021-05-03
    • 2020-04-02
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多