如何将CSV格式的患者化验数据转换为规范宽表格式
转换后的中文宽表格式
| 患者ID | 尿素 | 疟疾快速检测 | 谷丙转氨酶 | 血红蛋白 |
|---|---|---|---|---|
| KYN059AQP | 3.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
相关产品推荐
相关产品推荐

