在pandas df中删除列表字符串startswith

时间:2019-10-30 15:21:44

标签: python regex pandas dataframe

我有df行包含列表,并想删除与其他字符串组合的特定字符串。

df ['res']:

AL1 A 15, CY1 A 16, CY1 A 20, GL1 A 17, GL1 A 62,HOH A 604, HOH A 605, L21 A 18, MG A 550, PR1 A 36, TH1 A 19, TH1 A 37, TY1 A 34, VA1 A 14, HOH A 603, VA1 A 35

所需的输出:[用其他数字删除了HOH]

AL1 A 15, CY1 A 16, CY1 A 20, GL1 A 17, GL1 A 62, L21 A 18, MG A 550, PR1 A 36, TH1 A 19, TH1 A 37, TY1 A 34, VA1 A 14, VA1 A 35

我尝试过:

data['res'].str.split().apply(lambda x: [k for k in x if k.startswith('HOH')])

1 个答案:

答案 0 :(得分:1)

问题是,如果不使用任何其他内容而使用.split(),则每个子字符串也会被拆分。

因此,此... ,HOH A 604 ...将拆分为['...', ',' ,'HOH', 'A', '604', '...']

据我了解,您想删除每个带有以下数字的HOH吗?

.split()方式进行操作将导致仅删除HOH并保留A604

如果您将.split(',')与逗号作为参数使用,那么逗号之间的所有内容都会分开。

我在startswith上遇到的问题是,有时您的字符串在逗号后有一个额外的空格,而有时却没有(例如,HOH A 604 & , HOH A 605

因此,我建议改用not in。但是:请注意,这会删除所有包含HOH的子字符串,即使它们在末尾也是如此。

尝试一下:

df['res'].str.split(',').apply(lambda x: [k for k in x if 'HOH' not in k])

如果您需要再次输入字符串,则单元格值现在是字符串列表:

df['res'].str.split(',').apply(lambda x: ','.join([k for k in x if 'HOH' not in k]))