如何将字典列表正确转换为无换行的Pandas DataFrame
字典列表转Pandas DataFrame并解决单元格换行问题
一、整理原始数据,合并为患者级字典
原始数据中每个字段单独存储为一个字典,每9个字典对应一位患者的完整信息。首先需要将这些零散字典合并为每个患者的完整字典:
import pandas as pd # 修正语法错误后的原始数据 raw_data = [ {'SET_ID_PATIENT_ID': '1'}, {'PATIENT_ID_EXTERNAL_ID': '53203'}, {'PATIENT_ID_INTERNAL_ID': 'SUF5120411SC'}, {'PATIENT_NAME': 'SCOTT^HAROLD'}, {'DATE_OF_BIRTH': '19340410'}, {'SEX': 'M'}, {'PATIENT_ADDRESS': '20 HURTIN BOULEVARD^^SMITHTOWN^NY^11787'}, {'PATIENT_ACCOUNT_NUMBER': '204028637190'}, {'SSN_NUMBER_PATIENT': '090280291'}, {'SET_ID_PATIENT_ID': '1'}, {'PATIENT_ID_EXTERNAL_ID': '103308'}, {'PATIENT_ID_INTERNAL_ID': '97876400400'}, {'PATIENT_NAME': 'WISNISKI^ROBERT'}, {'DATE_OF_BIRTH': '19900119'}, {'SEX': 'M'}, {'PATIENT_ADDRESS': '3 PINEDALE RD^^HAUPPAUGE^NY^11788'}, {'PATIENT_ACCOUNT_NUMBER': '202728605261'}, {'SSN_NUMBER_PATIENT': '129761945'}, {'SET_ID_PATIENT_ID': '1'}, {'PATIENT_ID_EXTERNAL_ID': '103308'}, {'PATIENT_ID_INTERNAL_ID': '97876400400'}, {'PATIENT_NAME': 'WISNISKI^ROBERT'}, {'DATE_OF_BIRTH': '19900119'}, {'SEX': 'M'}, {'PATIENT_ADDRESS': '3 PINEDALE RD^^HAUPPAUGE^NY^11788'}, {'PATIENT_ACCOUNT_NUMBER': '202728605260'}, {'SSN_NUMBER_PATIENT': '129761945'} ] # 按每9个字典为一组,合并成患者完整信息 patients = [] for i in range(0, len(raw_data), 9): patient_info = {} for item in raw_data[i:i+9]: patient_info.update(item) patients.append(patient_info) # 转换为DataFrame df = pd.DataFrame(patients)
二、解决单元格换行问题
DataFrame显示换行通常是Pandas自动换行设置或内容特殊字符导致,可通过以下方式处理:
1. 修改Pandas全局显示设置
强制关闭自动换行,让单元格内容完整显示:
# 设置最大列宽为无限制,禁止自动换行 pd.set_option('display.max_colwidth', None) # 禁止DataFrame自动换行显示 pd.set_option('display.expand_frame_repr', False) # 查看处理后的结果 print(df)
2. 替换内容中的特殊分隔符
如果是原始数据中的^符号导致显示异常,可替换为常规分隔符:
# 替换姓名中的^为空格 df['PATIENT_NAME'] = df['PATIENT_NAME'].str.replace('^', ' ', regex=False) # 替换地址中的^^为逗号 df['PATIENT_ADDRESS'] = df['PATIENT_ADDRESS'].str.replace('^^', ', ', regex=False)
3. Jupyter Notebook专属处理
如果在Jupyter环境中,可通过HTML样式强制取消换行:
from IPython.display import display, HTML display(HTML(df.to_html().replace('<br>', '').replace('\n', '')))
内容的提问来源于stack exchange,提问作者Ateeb Shaikh
相关产品推荐
相关产品推荐

