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

如何将CSV格式的患者化验数据转换为规范宽表格式

转换后的中文宽表格式
患者ID尿素疟疾快速检测谷丙转氨酶血红蛋白
KYN059AQP3.0,3---
KQT767JLU--,5-
PWV009AGQ--1.0,,18
WUY523UZO---,11
ZMO679WDS----
TVZ695TUB-阴性--
批量转换实现代码

可以用Python完成CSV到宽表的自动化转换,核心步骤包括解析嵌套列表格式的检测项、合并同一患者的重复记录、生成规范宽表:

import pandas as pd
import ast

# 读取原始CSV文件
df = pd.read_csv('patient_lab_data.csv', skipinitialspace=True)

# 解析Analyte_line列中的嵌套列表字符串
def parse_analyte_list(line):
    try:
        return ast.literal_eval(line)
    except:
        return []

df['Parsed_Analytes'] = df['Analyte_line'].apply(parse_analyte_list)

# 展开所有检测项为单行记录
expanded_records = []
for _, row in df.iterrows():
    pid = row['Patient_ID']
    for item in row['Parsed_Analytes']:
        name, v1, v2, v3 = item
        # 合并非空的数值字段,用逗号分隔
        combined_value = ','.join([str(v) for v in [v1, v2, v3] if v not in ('', None)])
        expanded_records.append({
            'Patient_ID': pid,
            'Analyte': name,
            'Value': combined_value if combined_value else '-'
        })

expanded_df = pd.DataFrame(expanded_records)

# 转换为宽表结构,合并同一患者的同一检测项记录
wide_df = expanded_df.pivot_table(
    index='Patient_ID',
    columns='Analyte',
    values='Value',
    aggfunc=lambda x: ','.join(x) if len(x) > 1 else x.iloc[0] if not x.empty else '-'
).fillna('-')

# 检测项目名中文映射
cn_name_mapping = {
    'Urea': '尿素',
    'Rapid Malaria': '疟疾快速检测',
    'SGPT': '谷丙转氨酶',
    'HGB': '血红蛋白'
}

# 重命名列为中文并整理格式
wide_df = wide_df.rename(columns=cn_name_mapping)
wide_df = wide_df.reset_index().rename(columns={'Patient_ID': '患者ID'})
wide_df = wide_df[['患者ID', '尿素', '疟疾快速检测', '谷丙转氨酶', '血红蛋白']]

# 输出Markdown格式结果
print(wide_df.to_markdown(index=False))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:30:55