如何删除Pandas中除前两列外含非法字符的行?
解决方案
核心思路是动态选取除前两列外的所有列,批量验证每个值是否符合规则,最终保留所有后续列都合法的行,具体实现如下:
代码实现
import pandas as pd import re import numpy as np # 读取xlsx文件(替换为你的文件路径) df = pd.read_excel("your_file.xlsx") # 定义合法性校验函数 def is_valid(value): if pd.isna(value): return True # 匹配正则规则:数字开头,可跟若干个"-数字"组合 return bool(re.fullmatch(r'\d([-]\d)*', str(value))) # 动态获取除前两列外的目标列 target_columns = df.columns[2:] # 生成每行的合法性标记:所有目标列都合法则为True valid_rows = df[target_columns].applymap(is_valid).all(axis=1) # 筛选符合要求的行 filtered_df = df[valid_rows]
关键步骤说明
- 动态列选取:
df.columns[2:]自动获取前两列之后的所有列,不管后续列数量如何变化都能适配。 - 批量校验:
applymap(is_valid)对目标列的每个元素逐一校验,返回布尔矩阵标记每个值是否合法。 - 行级筛选:
.all(axis=1)确保只有当该行所有后续列的值都符合规则时,才会被保留。
这个方案避免了遍历列的繁琐操作,不需要穷举合法值,也无需合并列,完全满足需求且实现优雅。
内容的提问来源于stack exchange,提问作者Sebastian Schumann
相关产品推荐
相关产品推荐

