You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataFrame中执行验证检查并按格式记录错误到CSV

问题

数据集

Roll.  Marks.  Grade City
   0  123.  40      C.    Kol
   1. 476   80.     B.    Bhu
   2  789   20      D.    Che
   3. NaN.  90.     A.    Kol
   4. NaN.  70.     A.    Che

验证要求

需执行两项验证检查:

  • Roll列是否存在NaN/null值;
  • Marks列是否有低于35的数值。

若发现不符合项,需按以下格式将错误记录到CSV文件:

Timestamp. Error details
Current date. Check failed at row no.3,column Roll. Error value:Nan
Current date. Check failed at row no.2,column Marks. Error value:20

尝试代码(未得到正确格式)

roll=df['roll'].isna().any()
if roll:
  print("Roll is missing")
  with open('log.csv','w',newline='') as log:
    writer=csv.writer(log)
    writer.writerow([df].columns)
    for v in df.to_numpy():
      writer.writerow(v)

使用Python 3.6,需要技术帮助。


解决方案

以下是能生成符合要求格式日志的完整代码,包含两项验证逻辑:

import pandas as pd
import csv
from datetime import datetime

# 构建数据集(若已有DataFrame可替换为pd.read_csv读取)
data = {
    'Roll': [123, 476, 789, pd.NA, pd.NA],
    'Marks': [40, 80, 20, 90, 70],
    'Grade': ['C', 'B', 'D', 'A', 'A'],
    'City': ['Kol', 'Bhu', 'Che', 'Kol', 'Che']
}
df = pd.DataFrame(data)

# 获取格式化的当前时间戳
current_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

# 收集所有错误记录
error_records = []

# 检查Roll列的NaN值
roll_nan_rows = df[df['Roll'].isna()].index
for row_idx in roll_nan_rows:
    error_msg = f"Check failed at row no.{row_idx+1},column Roll. Error value:NaN"
    error_records.append([current_timestamp, error_msg])

# 检查Marks列低于35的值
marks_low_rows = df[df['Marks'] < 35].index
for row_idx in marks_low_rows:
    error_val = df.loc[row_idx, 'Marks']
    error_msg = f"Check failed at row no.{row_idx+1},column Marks. Error value:{error_val}"
    error_records.append([current_timestamp, error_msg])

# 写入CSV日志文件
with open('log.csv', 'w', newline='', encoding='utf-8') as log_file:
    writer = csv.writer(log_file)
    # 写入表头
    writer.writerow(['Timestamp', 'Error details'])
    # 批量写入错误记录
    writer.writerows(error_records)

print("日志文件已生成")

代码说明

  • 时间戳处理:用datetime.now()获取当前时间并格式化,确保和示例格式统一。
  • Roll列检查:筛选出Roll列为NaN的行索引,遍历生成对应错误信息,行号从1开始(匹配示例中的计数逻辑)。
  • Marks列检查:筛选出Marks值小于35的行,提取错误值并生成对应错误信息。
  • 日志写入:先写入指定表头,再批量写入所有错误记录,完全匹配要求的输出格式。
  • Python 3.6兼容:所有语法和依赖库(pandas、csv、datetime)均支持Python 3.6,注意pandas需使用适配3.6的版本(推荐1.1.5及以下)。

内容的提问来源于stack exchange,提问作者CoderG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:45:26