如何将印度政府网站新冠疫苗JSON数据转为指定结构的pandas dataframe
实现步骤
1. 导入依赖库
import pandas as pd import requests # 如需直接从官方数据源拉取数据可导入
2. 读取JSON数据
支持本地文件读取和线上数据源直接读取两种方式:
- 本地已下载文件读取:
with open("/Users/dsg281/Downloads/vacin.json", "r", encoding="utf-8") as f: raw_data = pd.read_json(f)
- 直接拉取官方数据源:
data_url = "https://www.mygov.in/sites/default/files/covid/vaccine/covid_vaccine_timeline.json" resp = requests.get(data_url) raw_data = resp.json()
3. 展开嵌套结构生成目标DataFrame
源数据为嵌套结构,每个日期的全国数据下嵌套了对应日期的各州疫苗数据,需遍历合并后转成DataFrame:
processed_data = [] # 遍历所有日期的疫苗记录 for day_record in raw_data["vaccine_data"]: # 提取当前日期的全国维度公共字段 day_common = { "day": day_record["day"], "india_dose1": day_record["india_dose1"], "india_dose2": day_record["india_dose2"], "india_total_doses": day_record["india_total_doses"] } # 合并当前日期下的所有州数据 for state_record in day_record["vacc_st_data"]: merged_item = {**day_common, **state_record} processed_data.append(merged_item) # 转换为目标结构DataFrame result_df = pd.DataFrame(processed_data)
4. 可选数据清洗
如需统一字段类型、处理空值可补充以下逻辑:
# 将剂量相关字段转换为数值类型,空值统一设为NaN numeric_cols = ["dose1", "dose2", "total_doses", "last_dose1", "last_dose2", "last_total_doses"] result_df[numeric_cols] = result_df[numeric_cols].apply(pd.to_numeric, errors="coerce")
内容的提问来源于stack exchange,提问作者Kum_R
相关产品推荐
相关产品推荐

