如何高效筛选含'Medellin'的大体积Pandas DataFrame行?
高效筛选DataFrame行的方案
你的原始方法效率极低,核心问题在于手动循环遍历每行数据和反复用append创建新DataFrame——这两种操作在处理18万行数据时会产生巨大的性能开销。下面是两种大幅提升效率的实现方式:
方案1:用isin直接匹配codigoSerial
利用pandas的矢量化操作isin,一步完成筛选,完全避开Python层面的循环:
cod = [25,44,79,80,83,84,85,86] final2 = antioquia[antioquia["codigoSerial"].isin(cod)].copy()
- 优势:底层基于C实现的矢量化操作,速度比手动循环快几十到上百倍;无需手动维护空DataFrame和索引列表,代码简洁。
方案2:直接筛选nombre包含'Medellin'的行
如果你的核心需求是找出nombre列含'Medellin'的行,根本不需要先手动整理cod列表,直接用str.contains就能实现:
# case=False 忽略大小写匹配,na=False 自动排除nombre为NaN的行 final2 = antioquia[antioquia["nombre"].str.contains("Medellin", case=False, na=False)].copy()
- 优势:更贴合原始需求,避免手动维护cod列表的麻烦(后续cod对应关系变化时无需修改代码),同样是高效的矢量化操作。
内容的提问来源于stack exchange,提问作者Tomas Rodriguez
相关产品推荐
相关产品推荐

