【问题标题】:Pandas DataFrame Column of Lists: Remove a Specific ValuePandas DataFrame 列表列:删除特定值
【发布时间】:2018-08-21 18:37:01
【问题描述】:

我有一个带有一列列表的 Pandas DataFrame。我想创建一个由这些相同列表组成的新列,减去一个特定元素:

[In]:
key1 = 'site channel fiscal_week'.split()
key2 = 'site dude fiscal_week'.split()
key3 = 'site eng fiscal_week'.split()

keys = pd.DataFrame({'key': [1,2,3],
                     'dims': [key1,key2,key3]})

keys

[Out]:
                         dims  key
[site, channel, fiscal_week]    1
[site, dude, fiscal_week]       2
[site, eng, fiscal_week]        3

这是我失败的方法:

keys['reduced_dims'] = keys['dims'].remove('fiscal_week')

我需要能够删除特定元素,而不是 pop() 从最后一个元素中删除。

期望的输出:

[Out]:
                        dims  key  reduced_dims
[site, channel, fiscal_week]    1  [site, channel]
[site, dude, fiscal_week]       2  [site, dude]
[site, eng, fiscal_week]        3  [site, eng]

【问题讨论】:

    标签: python list pandas


    【解决方案1】:

    keys['dims']pd.Series,而不是 list,并且没有 list.remove() 方法。您应该使用pd.Series.apply() 方法,该方法将某些函数应用于每行中的值。

    keys['reduced_dims'] = keys['dims'].apply(
        lambda row: [val for val in row if val != 'fiscal_week']
    )
    
    keys['reduced_dims']
    
    Out:
    0    [site, channel]
    1       [site, dude]
    2        [site, eng]
    Name: reduced_dims, dtype: object
    

    而且你不能只使用list.remove() 函数而不是列表理解,

    lambda row: [val for val in row if val != 'fiscal_week']
    

    因为list.remove() 返回None 你会得到这样的系列:

    keys['reduced_dims'] = keys['dims'].apply(lambda x: x.remove('fiscal_week'))
    keys['reduced_dims']
    
    Out:
    0    None
    1    None
    2    None
    Name: reduced_dims, dtype: object
    

    【讨论】:

    • 最后一个有趣的地方是因为remove 如果你不重新分配回键['reduced_dims'],就会“就地”行动,你的列系列仍然是变异的,这将实现想要的结果。
    • 我没有想过应用列表理解,但它非常有意义。谢谢!
    【解决方案2】:

    你可以试试

    def rem_fw(lst):
        lst.remove('fiscal_week')
        return lst
    
    keys['reduced_dims'] = keys['dims'].apply(rem_fw)
    

    【讨论】:

      猜你喜欢
      • 2020-02-10
      • 2018-01-25
      • 2018-04-28
      • 2018-05-29
      • 1970-01-01
      • 2016-10-04
      • 2023-02-17
      • 2013-08-12
      • 2022-09-29
      相关资源
      最近更新 更多