【问题标题】:How to append an element to a List inside a DataFrame?如何将元素附加到 DataFrame 内的列表中?
【发布时间】:2017-11-02 04:13:19
【问题描述】:

假设我有一个列表的 DataFrame,

 my_df = pd.DataFrame({'my_list':[[45,12,23],[20,46,78],[45,30,45]]})

产生以下结果:

         my_list
0  [45, 12, 23]
1  [20, 46, 78]
2  [45, 30, 45]

如何为每一行添加一个元素,比如 99,到 my_list

预期结果:

         my_list
0  [45, 12, 23, 99]
1  [20, 46, 78, 99]
2  [45, 30, 45, 99]

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:
    In [90]: my_df['my_list'] += [99]
    
    In [91]: my_df
    Out[91]:
                my_list
    0  [45, 12, 23, 99]
    1  [20, 46, 78, 99]
    2  [45, 30, 45, 99]
    

    【讨论】:

    • 太容易了。谢谢!!我在尝试使用 List 的附加功能找到解决方案时迷失了方向。
    • @GF,很高兴我能帮上忙 :)
    【解决方案2】:

    听起来非常无聊,但只是直接迭代值 - 这样您可以调用 append 并避免与 += 发生任何重新绑定,从而显着加快速度。

    for val in my_df.my_list:
        val.append(99)
    

    演示

    >>> import timeit
    >>> setup = '''
    import pandas as pd; import numpy as np
    df = pd.DataFrame({'my_list': np.random.randint(0, 100, (500, 500)).tolist()})
    '''
    
    >>> min(timeit.Timer('for val in df.my_list: val.append(90)', 
                         setup=setup).repeat(10, 1000))
    0.05669815401779488
    
    >>> min(timeit.Timer('df.my_list += [90]', 
                         setup=setup).repeat(10, 1000))
    2.7741127769695595
    

    当然,如果速度(或者即使不是速度)对您很重要,您应该质疑您是否真的需要在 DataFrame 中包含列表。考虑使用 NumPy 数组,直到您需要 Pandas 实用程序并执行类似

    的操作
    np.c_[arr, np.full(arr.shape[0], 90)]
    

    或者至少将 DataFrame 中的列表拆分为单独的列并分配一个新列。

    【讨论】:

    • @GF 没问题,请参阅我的编辑以获取更多信息。
    • 如果要附加的值来自另一列,你会怎么做?例如 df['to_add'] = 99.
    • @GF 是的,就是这样。但同样,如果您有不需要 Pandas 功能的数字数据,请使用 NumPy 数组,直到需要 Pandas 功能为止。
    猜你喜欢
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 2018-07-31
    • 2020-09-02
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    相关资源
    最近更新 更多