我的知识记录

Python字典列表数据转表格pandas教程

把接口返回、爬虫抓到的字典列表(list[dict])一键转成pandas DataFrame,处理缺字段、字段不齐、嵌套字典等常见坑。

场景痛点

调接口、爬网页、读JSON返回的数据,基本都是字典列表格式:[{"name":"张三","age":30}, ...]。想存Excel、写数据库、做统计,直接用字典没法操作。pandas的 DataFrame(rows) 一把转成表格,缺字段自动补NaN,比手动拼list方便一百倍。

用到的库

pip install pandas

完整代码

import pandas as pd

def dict_list_demo():
# 模拟接口返回的数据:每行字段可能不齐
rows = [
{"name": "张三", "age": 30, "city": "北京"},
{"name": "李四", "age": 25},                       # 缺city
{"name": "王五", "city": "深圳", "job": "工程师"},   # 缺age,多job
{"name": "赵六", "age": 35, "city": "上海", "job": "经理"},
]

# 1. 字典列表直接转DataFrame,缺字段自动补NaN
df = pd.DataFrame(rows)
print("直接转换:")
print(df)

# 2. 只保留需要的列,多余字段丢掉
df = pd.DataFrame(rows, columns=["name", "age", "city"])
print("\n只取指定列:")
print(df)

# 3. 字典里嵌套字典的情况:用json_normalize拍平
nested = [
{"name": "张三", "contact": {"phone": "13800001111", "email": "a@x.com"}},
{"name": "李四", "contact": {"phone": "13900002222", "email": "b@x.com"}},
]
flat = pd.json_normalize(nested)
print("\n嵌套字典拍平后:")
print(flat)

# 4. 转成字典列表再导出(反向操作)
back = df.to_dict(orient="records")
print("\n转回字典列表:")
print(back)

if __name__ == "__main__":
dict_list_demo()

代码讲解

  • pd.DataFrame(list_of_dict) 是最常用的转换方式,每个字典是一行,key自动成为列名,不同行key不齐自动补NaN。
  • columns=["name","age","city"] 只保留指定列,接口返回字段很多时,先挑需要的列再转,省内存。
  • pd.json_normalize(nested) 把嵌套字典拍平,contact.phone 会变成一列 contact.phone,用 sep="_" 可改成 contact_phone
  • df.to_dict(orient="records") 反向转回字典列表,方便写JSON或传给其他接口。
  • 字典key顺序不一致时,DataFrame会按列名字母序或首次出现顺序排,需要指定 columns 控制顺序。

运行结果

控制台打印4行字典转DataFrame后的结果:李四的city是NaN,王五的age是NaN。嵌套字典拍平后contact.phone和contact.email变成两列。最后打印转回的字典列表。

注意事项

  • 字典值如果是列表或字典,DataFrame那一格会存成对象,后续操作会出问题,用json_normalize拍平。
  • 缺字段补NaN后,数值列会自动变float(因为NaN是float),见 类型转换
  • 大量字典(10万+)转DataFrame会占内存,边读边append到list,最后一次性转,别逐行 df.append
  • 从JSON文件读直接用 pd.read_json("data.json"),比自己loads再转更省事。

Python字典列表数据转表格pandas教程

标签:

更新时间:2026-09-14 21:01:28

上一篇:Python Excel数据导入SQLite数据库实战

下一篇:Python数据标准化归一化方法教程