如何在pandas列中保留指定列表内的字符串并过滤无关内容
实现方案
核心实现逻辑是将name列的逗号分隔字符串拆分后,匹配保留列表过滤内容,再重新拼接为字符串,两种常用实现方式如下:
1. 轻量场景实现(数据量<10万行,易读性高)
import pandas as pd # 构造示例数据 df = pd.DataFrame( { "ID": [1, 2, 3, 4, 5], "name": [ "Mitty, Kitty", "Kandy, Puppy", "Judy, Micky, Loudy", "Cindy, Judy", "Kitty, Wicky", ], } ) To_keep_lst = ["Kitty", "Kandy", "Micky", "Loudy", "Wicky"] # 转为集合提升匹配效率 keep_set = set(To_keep_lst) # 核心处理逻辑 df['filtered_name'] = df['name'].apply( lambda x: ', '.join([item.strip() for item in x.split(',') if item.strip() in keep_set]) )
运行后输出结果:
ID name filtered_name 0 1 Mitty, Kitty Kitty 1 2 Kandy, Puppy Kandy 2 3 Judy, Micky, Loudy Micky, Loudy 3 4 Cindy, Judy 4 5 Kitty, Wicky Kitty, Wicky
2. 大数据量场景实现(性能更优)
如果你的数据集行数超过10万,推荐使用pandas向量化操作替代apply提升运行效率:
df['filtered_name'] = df['name'].str.split(',\s*').explode()\ .loc[lambda x: x.isin(keep_set)]\ .groupby(level=0).agg(', '.join)\ .reindex(df.index, fill_value='')
可选:空值处理
如果需要将无匹配项的空字符串替换为NaN,可以补充以下代码:
import numpy as np df['filtered_name'] = df['filtered_name'].replace('', np.nan)
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

