如何在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
相关产品推荐
相关产品推荐

