
今天有读者问我,怎么把爬取的数据返回的复杂json快速转换成DataFrame显示, 他希望展示在页面的数据是列表展示, 返回的复杂json存在嵌套的数据结构。
这里分享一个Python小技巧
我们假设复杂的json对象类似
data = {
"order_id": 1001,
"customer": {"name": "Alice", "phone": "15900000000"},
"items": [
{"id": 1, "name": "商品A", "price": 99},
{"id": 2, "name": "商品B", "price": 199}
]
}我们如果想把这样的一个json 弄成 一个一维的数据怎么弄。 如果对pandas比较熟悉的同学会知道, pandas内置了高效方法pd.json_normalize() ,可自动展平嵌套结构,支持自定义路径和分隔符。
完整代码如下:
import pandas as pd
import json
# 设置全局显示选项
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.expand_frame_repr', False)
pd.set_option('display.max_colwidth', 100)
# 示例:嵌套JSON(含对象和列表)
data = {
"order_id": 1001,
"customer": {"name": "Alice", "phone": "15900000000"},
"items": [
{"id": 1, "name": "商品A", "price": 99},
{"id": 2, "name": "商品B", "price": 199}
]
}
# 展平数据,指定列表路径和保留字段
df = pd.json_normalize(
data,
record_path="items", # 展开列表字段
meta=["order_id", ["customer", "name"],["customer", "phone"]], # 保留外层字段
sep="_", # 自定义分隔符(默认用".")
record_prefix="item_" # 避免列名冲突
)
print(df)最后效果
如果碰到 JSON 包含异构数据或深度不一致,可能还是需要手动提取并重组。 具体问题具体分析
题外话:
最近在思考怎么优化自己的策略, 有些东西不好描述, 那就随心记录Python小技巧在此。
本周股市连涨3天,梦到牛市来了。 6.24牛市, 和去年924那波是不是有点像。 历史虽然每次不一样,但总有那么一点相似。淡定, 错过了机会等待下一波,市场不缺机会,还是要做一名耐心的猎人,善猎者善等待。
写首打油诗劝诫自己 。
散户满眼星辉奔盛宴,
岂料刀锋暗转冷光寒。
砧板无声锈色染,
纵有鳞光终成沫散。
一尾鱼追千重浪,
泡沫裂时残骨如山。
资本烹鲜何曾歇?
饕餮宴席终是修罗宴!
如果我的分享对你投资有所帮助,不吝啬给个点赞关注呗。