如何在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
相关产品推荐
相关产品推荐

