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再转更省事。

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