【问题标题】:Pandas Dataframe add element to a list in a cellPandas Dataframe 将元素添加到单元格中的列表
【发布时间】:2022-11-29 21:38:47
【问题描述】:

我正在尝试这样的事情: List append in pandas cell

但问题是这个帖子已经过时了,所有的东西都被弃用了,不应该再使用了。

d = {'col1': ['TEST', 'TEST'], 'col2': [[1, 2], [1, 2]], 'col3': [35, 89]}
df = pd.DataFrame(data=d)
col1 col2 col3
TEST [1, 2, 3] 35
TEST [1, 2, 3] 89

我的 Dataframe 看起来像这样,如果有 col2 是我感兴趣的那个。我需要为 DataFrame 中的每一行将 [0,0] 添加到 col2 的列表中。我真正的 DataFrame 是动态形状的,所以我不能单独设置每个单元格。

最终结果应该是这样的:

col1 col2 col3
TEST [1, 2, 3, 0, 0] 35
TEST [1, 2, 3, 0, 0] 89

我用 df.applydf.assign 搞混了,但我似乎无法让它工作。 我试过了:

df['col2'] += [0, 0]

df = df.col2.apply(lambda x: x.append([0,0]))
     Which returns a Series that looks nothing like i need it

df = df.assign(new_column = lambda x: x + list([0, 0))

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    不确定这是否是最好的方法,但是选项 2 稍作修改即可

    import pandas as pd
    
    d = {'col1': ['TEST', 'TEST'], 'col2': [[1, 2], [1, 2]], 'col3': [35, 89]}
    df = pd.DataFrame(data=d)
    df["col2"] = df["col2"].apply(lambda x: x + [0,0])
    print(df)
    

    首先,如果您想将可迭代对象的所有成员添加到列表中,请使用.extend 而不是.append。这不起作用,因为该方法就地工作并且不返回任何内容,因此“col2”值变为None,因此请改用列表求和。最后,您想将修改后的列分配给原始 DataFrame,而不是覆盖它(这是 Series 返回的原因)

    【讨论】:

      【解决方案2】:

      一个想法是使用列表理解:

      df["col2"] = [x + [0,0] for x in  df["col2"]]
         
      print (df)
         col1          col2  col3
      0  TEST  [1, 2, 0, 0]    35
      1  TEST  [1, 2, 0, 0]    89
      

      【讨论】:

        猜你喜欢
        • 2021-09-21
        • 2013-12-27
        • 2016-03-02
        • 2020-12-29
        • 1970-01-01
        • 2019-03-18
        • 2013-01-19
        • 1970-01-01
        • 2016-10-31
        相关资源
        最近更新 更多