如何从DataFrame中提取固定列与动态数值列
解决方案
以下两种方法均比iloc定位更稳定,不会因为列顺序变动导致筛选结果出错:
方法1:按列名字符串特征筛选
适配你示例中数字/数字格式的动态列名,用正则匹配实现:
import pandas as pd # 定义固定要保留的列 fixed_cols = ["ZR", "ER"] # 筛选所有符合数值格式的动态列 dynamic_cols = [ col for col in df.columns if col not in fixed_cols and pd.Series([col]).str.match(r"^\d+/\d+$").iloc[0] ] # 合并列名后提取目标数据集 target_df = df[fixed_cols + dynamic_cols]
如果你的数值格式列不局限于数字/数字格式,只要列名可转换为数值即可,可替换动态列筛选逻辑:
def is_numeric_name(col_name): try: # 适配斜杠分隔的数值格式,替换为小数点后尝试转换 float(col_name.replace("/", ".")) return True except ValueError: return False dynamic_cols = [col for col in df.columns if col not in fixed_cols and is_numeric_name(col)]
方法2:按列的数据类型筛选
如果动态列的存储类型本身就是数值类(int/float等),可以直接用类型筛选:
fixed_cols = ["ZR", "ER"] # 筛选所有数值类型的列 numeric_cols = df.select_dtypes(include=["int64", "float64"]).columns.tolist() target_df = df[fixed_cols + numeric_cols]
内容的提问来源于stack exchange,提问作者Naruto
相关产品推荐
相关产品推荐

