繁体   English   中英

列表的Pandas DataFrame列:删除特定值

[英]Pandas DataFrame Column of Lists: Remove a Specific Value

我有一个带有列表列的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]

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

你可以试试

def rem_fw(lst):
    lst.remove('fiscal_week')
    return lst

keys['reduced_dims'] = keys['dims'].apply(rem_fw)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM