Python中提取含指定Name值数据行的更优方法 适用于上万行数据集
解决方案
分两种常见场景处理,你可以根据自己的匹配需求选择:
场景1:需要Name完全匹配指定值(推荐优先使用,效率更高)
你不需要手动拼接所有Name值,只要把要匹配的名单存为Python列表,或者直接从独立的名单文件读取即可,示例代码如下:
import pandas as pd # 读取原始数据集 df = pd.read_csv('Sample.csv') # 方法A:直接在代码里定义要匹配的Name列表 # target_names = ["name_1", "name_3", "name_4", ...] # 填入所有需要匹配的Name即可 # 方法B:从独立的TXT文件读取名单(适合名单量大、需要频繁修改的场景,TXT每行存1个Name) with open("target_names.txt", "r", encoding="utf-8") as f: target_names = [line.strip() for line in f if line.strip()] # 筛选完全匹配Name的行 df_filtered = df[df["Name"].isin(target_names)] # 导出结果,index=False可以避免导出多余的索引列 df_filtered.to_csv("Name_list.csv", index=False)
场景2:需要模糊匹配(和你之前用str.contains的逻辑一致,只要Name包含指定子串就算匹配)
可以用join方法自动生成正则匹配规则,不需要手动拼接|分隔的字符串,还可以自动处理特殊字符的转义问题,示例代码如下:
import pandas as pd import re # 读取原始数据集 df = pd.read_csv('Sample.csv') # 读取目标Name列表,同样支持从文件读取 target_names = ["name_1", "name_3", "name_4", ...] # 自动生成正则匹配规则,re.escape会自动转义Name里的正则特殊字符(比如.、*、?等),避免匹配出错 pattern = '|'.join(re.escape(name) for name in target_names) # 筛选包含指定子串的行,na=False会跳过Name列为空的行避免报错 df_filtered = df[df["Name"].str.contains(pattern, na=False)] # 导出结果 df_filtered.to_csv("Name_list.csv", index=False)
注意事项
- 上万行数据的场景下,完全匹配用
isin方法的执行效率远高于正则模糊匹配,如果你的需求是完全相等优先用第一种方案 - 匹配名单单独存在独立文件里的话,后续调整匹配名单不需要修改业务代码,维护成本更低
内容的提问来源于stack exchange,提问作者Piyush Ghasiya
相关产品推荐
相关产品推荐

