如何合理构建含多值的兽医预约Pandas DataFrame?
解决方案
问题根源
你写的字典里"Pet Information"是嵌套字典,Pandas无法直接将这种混合列表与嵌套字典的结构转换为DataFrame,这就是报错的原因。而且Excel本身不支持嵌套列结构,所以这种写法既不兼容Pandas也没法导出到Excel。
方案1:扁平化结构(推荐,兼容Excel)
把所有信息拆成平级列,既符合Pandas的要求,也能直接导出/导入Excel,查询操作也更直观。
构造DataFrame代码
import pandas as pd # 构造多条预约数据 appointment_data = [ {"Appointment": "Appointment: Natasha", "Pet Name": "Milo", "Pet Breed": "Golden Retriever", "Pet Age": 3}, {"Appointment": "Appointment: Jake", "Pet Name": "Luna", "Pet Breed": "Siamese Cat", "Pet Age": 2}, {"Appointment": "Appointment: Emily", "Pet Name": "Max", "Pet Breed": "Bulldog", "Pet Age": 5} ] # 转换为DataFrame df_appt = pd.DataFrame(appointment_data) print(df_appt)
查询宠物信息
通过主人姓名筛选,直接用字符串匹配:
# 查看Natasha的宠物信息 natasha_pet = df_appt[df_appt["Appointment"].str.contains("Natasha")] print(natasha_pet)
如果需要更灵活的查询,也可以单独添加Owner Name列,后续筛选更直接:
# 添加主人姓名列 df_appt["Owner Name"] = df_appt["Appointment"].str.replace("Appointment: ", "") # 直接通过主人姓名筛选 jake_pet = df_appt[df_appt["Owner Name"] == "Jake"] print(jake_pet)
Excel表格结构设计
直接用平级列,每一行对应一条预约记录,结构如下:
| Appointment | Pet Name | Pet Breed | Pet Age |
|---|---|---|---|
| Appointment: Natasha | Milo | Golden Retriever | 3 |
| Appointment: Jake | Luna | Siamese Cat | 2 |
| Appointment: Emily | Max | Bulldog | 5 |
这样的表格可以直接用pd.read_excel("你的文件路径.xlsx")导入为DataFrame,导出则用df_appt.to_excel("预约记录.xlsx", index=False)。
方案2:嵌套列结构(仅适用于Pandas,不兼容Excel)
如果一定要保留"Pet Information"的分组概念,可以用Pandas的多级列,但导出Excel时会被自动扁平化:
import pandas as pd data = { "Appointment": ["Appointment: Natasha", "Appointment: Jake"], ("Pet Information", "Pet Name"): ["Milo", "Luna"], ("Pet Information", "Pet Breed"): ["Golden Retriever", "Siamese Cat"], ("Pet Information", "Pet Age"): [3, 2] } df_appt = pd.DataFrame(data) print(df_appt)
这种结构在Pandas里可以通过df_appt["Pet Information"]直接查看所有宠物信息列,但导出到Excel后,列名会变成Pet Information_Pet Name这类格式,实用性不如扁平化结构。
内容的提问来源于stack exchange,提问作者aki
相关产品推荐
相关产品推荐

