如何检测pandas dataframe中含非指定字符的单元格及其位置
Pandas DataFrame 字符合规校验实现方案
校验规则
指定合法字符范围为:A、B、C、a、b、c、1、2、3、&、%、=、/,需识别所有包含非合法字符的单元格,输出对应行索引、列名、异常值。
完整实现代码
import pandas as pd import re # 1. 构造示例DataFrame(实际使用时替换为你的数据源) df = pd.DataFrame({ 'Col1': ['Abc', 'bbb'], 'Col2': ['Øa', '+'], 'Col3': ['12', '}'] }) # 2. 定义合法字符校验规则 # 正则含义:匹配仅由指定合法字符组成的完整字符串 legal_regex = re.compile(r'^[ABCabc123&%=/]*$') # 3. 遍历校验所有单元格 abnormal_list = [] for row_idx, row_data in df.iterrows(): for col_name, cell_val in row_data.items(): # 统一转为字符串校验,兼容数值类型单元格 cell_str = str(cell_val) # 若需将空值/NaN判定为合法,可取消注释下一行 # if pd.isna(cell_val): continue if not legal_regex.fullmatch(cell_str): abnormal_list.append({ "行索引": row_idx, "列名": col_name, "异常值": cell_val }) # 4. 输出异常结果 for item in abnormal_list: print(f"行索引:{item['行索引']},列名:{item['列名']},异常值:{item['异常值']}")
运行输出结果
行索引:0,列名:Col2,异常值:Øa 行索引:1,列名:Col2,异常值:+ 行索引:1,列名:Col3,异常值:}
说明
- 正则采用全匹配规则,确保单元格内所有字符都属于合法集合,不会出现部分字符合法就判定通过的误差
- 可直接修改
legal_regex中括号内的字符集,快速适配不同的合规校验需求 - 对于大体积DataFrame,可将遍历逻辑替换为
df.stack().apply()的向量化操作提升运行效率
内容的提问来源于stack exchange,提问作者Data007
相关产品推荐
相关产品推荐

