You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中精准筛选指定列并保留xvalues列?

Pandas DataFrame 列筛选解决方案

需求1:保留xvalues列 + 筛选含'2.5'/'2.7'/'3.6'的列

你之前的写法仅匹配了含'2.5'的列,未包含xvalues列。可以通过两种方式实现需求:

方法1:正则表达式同时匹配目标列和xvalues

注意正则中.需转义为\.(否则会匹配任意字符),同时精确匹配xvalues列名:

df_filtered = df_psrr_funct.filter(regex='^xvalues$|2\.5|2\.7|3\.6')

方法2:手动构造列名列表(更直观)

先收集符合条件的列,再结合xvalues列进行切片:

target_cols = [col for col in df_psrr_funct.columns if any(sub in col for sub in ['2.5', '2.7', '3.6'])]
df_filtered = df_psrr_funct[['xvalues'] + target_cols]

需求2:精确筛选含'1.6'/'1.62'/'1.656'的列(避免模糊匹配)

之前的1\.6会匹配所有包含1.6的子串(比如1.65、1.62),要实现精确匹配,需确保目标数值是列名中的独立分段(前后为下划线或列名首尾):

方法1:正则边界断言

通过正向/反向断言限定匹配范围,避免模糊匹配:

df_filtered_1v6 = df_psrr_funct.filter(regex='^xvalues$|(?<=_|^)1\.6(?=_|$)|(?<=_|^)1\.62(?=_|$)|(?<=_|^)1\.656(?=_|$)')
  • (?<=_|^):匹配前面是下划线或列名开头的位置
  • (?=_|$):匹配后面是下划线或列名结尾的位置
  • 该规则确保1.6仅匹配独立的子串,不会被1.65中的1.6部分误匹配

方法2:拆分列名校验(更易读)

将列名按下划线拆分,检查目标子串是否为独立分段:

exact_substrings = ['1.6', '1.62', '1.656']
target_cols_1v6 = [col for col in df_psrr_funct.columns if any(sub in col.split('_') for sub in exact_substrings)]
df_filtered_1v6 = df_psrr_funct[['xvalues'] + target_cols_1v6]

内容的提问来源于stack exchange,提问作者Confused

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:40:20