我有pandas.DataFrame
:
index question_id tag
0 1858 [pset3, game-of-fifteen]
1 2409 [pset4]
2 4346 [pset6, cs50submit]
3 9139 [pset8, pset5, gradebook]
4 9631 [pset4, recover]
我需要删除tag
列中除pset*
个字符串以外的字符串列表中的每个字符串。
所以我需要结束这样的事情:
index question_id tag
0 1858 [pset3]
1 2409 [pset4]
2 4346 [pset6]
3 9139 [pset8, pset5]
4 9631 [pset4]
我该怎么办呢?
答案 0 :(得分:2)
一个选项:使用apply
方法循环浏览tag
列中的项目;对于每个项目,使用列表推导来使用startswith
方法基于前缀过滤字符串:
df['tag'] = df.tag.apply(lambda lst: [x for x in lst if x.startswith("pset")])
df
答案 1 :(得分:2)
您可以将函数应用于仅使用以tag
'pset'
系列
df.tag.apply(lambda x: [xx for xx in x if xx.startswith('pset')])
# returns:
0 [pset3]
1 [pset4]
2 [pset6]
3 [pset8, pset5]
4 [pset4]
答案 2 :(得分:2)
你甚至可以在运算符
中使用pythondf.tag = df.tag.apply(lambda x: [elem for elem in x if 'pset' in elem])
0 [pset3]
1 [pset4]
2 [pset6]
3 [pset8, pset5]
4 [pset4]