如何在Dataframe指定行列插入校验错误信息并合并导出
实现方案
核心逻辑如下:
- 初始化与原始数据索引完全对齐的错误存储DataFrame,错误信息列初始为空字符串
- 每完成一个字段的校验,就向不符合规则的对应行追加错误信息(而非直接覆盖),多个错误用分隔符分隔
- 最后可按需过滤掉无错误的行,导出为CSV
完整代码示例
import pandas as pd # 1. 读入/构造原始数据,你可以替换为自己的pd.read_xxx逻辑 data = { "Date": ["01-12-2021", "01-12-2021", "01-10-2021", "01-15-2021", "01-16-2021"], "Clearing Member PAN": ["AAACM6094BBB", "AAACM6094R", "AAACM6094R", "AAACM6094RBBB", "AAACM6094R"], "Trading Member PAN": ["AAACM6094R", "AAACM6094R", "AAACM6094R", "AAACM6094R", "AAACM6094R"], "CPCode": [124, 123, 123, 123, 123], "CPPAN": ["GMAPS5536A", "GMAPS5536A", "GMAPS5536A", "GMAPS5536A", "GMAPS5536A"] } df = pd.DataFrame(data) # 2. 初始化错误表,和原数据索引完全对齐 error_df = pd.DataFrame(index=df.index) error_df["error_msg"] = "" # 3. 定义校验规则 PANValidation = r"^[A-Za-z]{5}[0-9]{4}[A-Za-z]{1}$" # 加$匹配结尾避免多余后缀字符 DateFormatValidation = r"^(0[1-9]|[12][0-9]|3[01])[-](0[1-9]|1[012])[-]\d{4}$" # 4. 逐字段校验,追加错误信息 # 校验Date列 invalid_date_mask = ~df["Date"].str.match(DateFormatValidation) error_df.loc[invalid_date_mask, "error_msg"] += "Date Format incorrect; " # 校验Clearing Member PAN列 invalid_pan_mask = ~df["Clearing Member PAN"].str.match(PANValidation) error_df.loc[invalid_pan_mask, "error_msg"] += "Invalid Pan; " # 5. 收尾处理 # 去除末尾多余的分号和空格 error_df["error_msg"] = error_df["error_msg"].str.rstrip("; ") # 可选:过滤掉没有错误的行 error_df = error_df[error_df["error_msg"] != ""] # 6. 导出CSV error_df.to_csv("validation_errors.csv", encoding="utf-8-sig")
问题说明
之前使用at方法未得到预期结果,大概率是因为直接赋值导致同一行多个校验规则的错误互相覆盖,只能保留最后一个校验的错误信息,使用+=追加的方式可以解决该问题。
内容的提问来源于stack exchange,提问作者Alok Sharma
相关产品推荐
相关产品推荐

