Python 检验项目分析与历次报告比对
读取检验项目数据并与历次报告进行比对分析,这里假设检验数据以 CSV 文件格式存储,且每次报告的数据结构相同(包含患者 ID、检验项目名称、检验结果等列)。
import pandas as pddef compare_test_results(current_report_path, historical_report_paths):# 读取当前报告数据current_report = pd.read_csv(current_report_path)# 将患者ID设置为索引,方便后续比对current_report.set_index('患者ID', inplace=True)# 存储历次报告数据的字典historical_reports = {}for path in historical_report_paths:report_name = path.split('/')[-1] # 获取报告文件名作为字典的键historical_report = pd.read_csv(path)historical_report.set_index('患者ID', inplace=True)historical_reports[report_name] = historical_report# 遍历当前报告中的每个患者for patient_id in current_report.index:current_patient_results = current_report.loc[patient_id]print(f"患者 {patient_id} 的当前检验结果:")print(current_patient_results)# 与历次报告比对for report_name, historical_report in historical_reports.items():if patient_id in historical_report.index:historical_patient_results = historical_report.loc[patient_id]print(f"与 {report_name} 比对结果:")# 比对每个检验项目的结果for test_item in current_patient_results.index:if current_patient_results[test_item]!= historical_patient_results[test_item]:print(f"{test_item}: 当前结果 {current_patient_results[test_item]}, 历史结果 {historical_patient_results[test_item]}")# 当前报告路径
current_report_path = 'current_report.csv'
# 历次报告路径列表
historical_report_paths = ['historical_report_1.csv', 'historical_report_2.csv']compare_test_results(current_report_path, historical_report_paths)
如果文件不存在、文件格式不正确或者读取过程中出现其他 I/O 错误,代码将会抛出异常并中断执行。可以添加try-except
语句来捕获这些可能出现的异常,并给出友好的提示信息:
def compare_test_results(current_report_path, historical_report_paths):try:# 读取当前报告数据current_report = pd.read_csv(current_report_path)# 将患者ID设置为索引,方便后续比对current_report.set_index('患者ID', inplace=True)except FileNotFoundError:print(f"当前报告文件 {current_report_path} 不存在,请检查路径是否正确。")returnexcept pd.errors.ParserError:print(f"当前报告文件 {current_report_path} 格式有误,无法正确读取,请检查文件内容。")returnhistorical_reports = {}for path in historical_report_paths:try:report_name = path.split('/')[-1] # 获取报告文件名作为字典的键historical_report = pd.read_csv(path)historical_report.set_index('患者ID', inplace=True)historical_reports[report_name] = historical_reportexcept FileNotFoundError:print(f"历史报告文件 {path} 不存在,请检查路径是否正确。")continueexcept pd.errors.ParserError:print(f"历史报告文件 {path} 格式有误,无法正确读取,请检查文件内容。")continue# 后续代码保持不变for patient_id in current_report.index:current_patient_results = current_report.loc[patient_id]print(f"患者 {patient_id} 的当前检验结果:")print(current_patient_results)for report_name, historical_report in historical_reports.items():if patient_id in historical_report.index:historical_patient_results = historical_report.loc[patient_id]print(f"与 {report_name} 比对结果:")for test_item in current_patient_results.index:if current_patient_results[test_item]!= historical_patient_results[test_item]:print(f"{test_item}: 当前结果 {current_patient_results[test_item]}, 历史结果 {historical_patient_results[test_item]}")
结果展示优化:
对于大量的数据或者复杂的检验项目情况,这样的展示方式不够直观和易于分析。可以考虑将比对结果整理成一个新的数据结构(比如DataFrame
),然后将其输出为 CSV 文件或者进行更美观的可视化展示(例如使用matplotlib
绘制柱状图对比差异等)。将比对结果整理为DataFrame
并输出为 CSV 文件(展示添加的相关部分代码):
import pandas as pddef compare_test_results(current_report_path, historical_report_paths):# 前面读取数据及设置索引部分代码不变all_comparison_results = []for patient_id in current_report.index:current_patient_results = current_report.loc[patient_id]patient_comparison_results = {'患者ID': patient_id}for report_name, historical_report in historical_reports.items():if patient_id in historical_report.index:historical_patient_results = historical_report.loc[patient_id]for test_item in current_patient_results.index:if current_patient_results[test_item]!= historical_patient_results[test_item]:comparison_detail = {'检验项目': test_item,'当前结果': current_patient_results[test_item],'历史结果': historical_patient_results[test_item],'报告名称': report_name}patient_comparison_results.update(comparison_detail)all_comparison_results.append(patient_comparison_results)comparison_df = pd.DataFrame(all_comparison_results)comparison_df.to_csv('comparison_results.csv', index=False)
-
会生成一个包含所有患者比对结果详细信息的 CSV 文件,方便后续进一步查看和分析。
-
数据类型一致性检查方面:代码没有对不同报告中同一检验项目的数据类型是否一致进行检查。如果数据类型不一致(比如一个报告中某指标是整数,另一个报告中是字符串),可能会导致比对结果不准确或者出现意外错误。可以添加代码在比对前先检查数据类型一致性
-
def compare_test_results(current_report_path, historical_report_paths):# 读取当前报告数据及设置索引等前面代码不变historical_reports = {}for path in historical_report_paths:report_name = path.split('/')[-1]historical_report = pd.read_csv(path)historical_report.set_index('患者ID', inplace=True)historical_reports[report_name] = historical_report# 检查数据类型一致性for test_item in current_report.columns:if test_item in historical_report.columns:if current_report[test_item].dtype!= historical_report[test_item].dtype:print(f"检验项目 {test_item} 在当前报告和 {report_name} 中的数据类型不一致,请检查数据。")continue# 后续遍历比对等代码不变