进货篇-Day4|进货第三式:读取 JSON、字典等多样数据源

1 次阅读 2026-10-21 14:30

📖 知识点

1. 从字典 / 列表创建 DataFrame

前面 Day1 用字典创建过。这里进一步:列表套字典(每行一个字典)是最常见的数据结构:

import pandas as pd

data = [
    {"菜名": "白菜", "价格": 3},
    {"菜名": "番茄", "价格": 5},
    {"菜名": "土豆", "价格": 2},
]
df = pd.DataFrame(data)
print(df)

运行输出:

   菜名  价格
0  白菜    3
1  番茄    5
2  土豆    2

2. 从 JSON 读取

pd.read_json("文件.json") 直接读 JSON 文件成 DataFrame:

# 读JSON文件
df = pd.read_json("食材.json")

JSON(JavaScript 对象表示法)是接口返回数据最常用的格式,爬虫抓到的数据往往就是 JSON。

3. 从 JSON 字符串 / 字典直接转

如果数据是接口返回的 JSON 字符串或已经是 Python 字典:

import json

# JSON字符串 → 字典 → DataFrame
json_str = '[{"菜名":"白菜","价格":3}]'
df = pd.DataFrame(json.loads(json_str))

步骤:json.loads() 把 JSON 字符串转成 Python 字典 / 列表,再 DataFrame() 转表格。

4. 多样数据源对比

数据源读取方式
CSV 文件pd.read_csv()
Excel 文件pd.read_excel()
JSON 文件pd.read_json()
Python 字典 / 列表pd.DataFrame(数据)

💡 理解

  • 核心思想:任何结构化的 Python 数据,都能用 pd.DataFrame() 变成表格
  • 字典、列表、JSON 字符串→字典,通通 "装盘"
  • 爬虫 / 接口数据常用 JSON,学会这招就能把抓来的数据变成可分析的表

⚠️ 易错提醒

  1. pd.DataFrame() 传入字典时,键会成为列名
  2. JSON 字符串要先 json.loads() 转成 Python 对象,再转 DataFrame
  3. 字典各 "键" 数量不一致时,缺失位置会变成 NaN(缺失值,Day9 再学)

⚔️ Kata 实战任务

任务需求:

  1. 导入 pandas 和 json
  2. 用 "列表套字典" 创建一个 DataFrame(菜名、价格)
  3. 用 pd.DataFrame() 把一个 Python 字典转成 DataFrame
  4. 用 pd.read_json() 读取一个 JSON 文件(若有),或用 json.loads 转 JSON 字符串
  5. 打印各结果,理解 "任何结构化数据都能变表格"

参考代码

import pandas as pd
import json

# 方式1:列表套字典创建食材桌
data = [
    {"菜名": "白菜", "价格": 3},
    {"菜名": "番茄", "价格": 5},
    {"菜名": "土豆", "价格": 2},
]
df1 = pd.DataFrame(data)
print("===== 方式1:列表套字典 =====")
print(df1)

# 方式2:把字典直接转DataFrame
dict_data = {"菜名": ["黄瓜", "茄子"], "价格": [4, 6]}
df2 = pd.DataFrame(dict_data)
print("\n===== 方式2:字典转表格 =====")
print(df2)

# 方式3:JSON字符串 → 字典 → DataFrame
json_str = '[{"菜名":"冬瓜","价格":1},{"菜名":"南瓜","价格":2}]'
df3 = pd.DataFrame(json.loads(json_str))
print("\n===== 方式3:JSON字符串转表格 =====")
print(df3)

运行输出:

===== 方式1:列表套字典 =====
   菜名  价格
0  白菜    3
1  番茄    5
2  土豆    2

===== 方式2:字典转表格 =====
   菜名  价格
0  黄瓜    4
1  茄子    6

===== 方式3:JSON字符串转表格 =====
   菜名  价格
0  冬瓜    1
1  南瓜    2

🧠 思考题

  1. pd.DataFrame() 传入 "列表套字典" 和直接传 "字典"(键是列名),两种方式创建的表格列顺序一样吗?各是什么效果?
  2. 为什么爬虫 / 接口拿到的 JSON 数据,要先 json.loads() 再转 DataFrame?