港交所JSON转DataFrame遇问题,仅需提取style 1数据
港交所JSON数据提取与转换问题解决
问题描述
从港交所指定网页提取JSON数据的代码如下:
import pandas as pd import requests import json url = r'https://www.hkex.com.hk/eng/csm/MonthlyStat/data_tab_monthly_202302e.js?_=1' response = requests.get(url) if response.status_code != 200: exit(1) text = response.text[response.text.index('=') + 1:] data = json.loads(text)
尝试用df = pd.json_normalize(data, max_level=2)转换为DataFrame时,调整max_level参数无效果,且仅需提取所有id下的style 1数据,作为JSON新手不确定正确处理方式。
解决方案
这个JSON的结构是嵌套字典集合,每个顶层元素包含id和对应嵌套数据,style 1数据藏在每个条目的子层级里。直接用json_normalize无法精准筛选目标内容,需要先遍历提取再转换:
import pandas as pd import requests import json url = r'https://www.hkex.com.hk/eng/csm/MonthlyStat/data_tab_monthly_202302e.js?_=1' response = requests.get(url) if response.status_code != 200: exit(1) text = response.text[response.text.index('=') + 1:] data = json.loads(text) # 提取所有id下的style 1数据 target_data = [] for item in data: item_id = item.get('id') # 筛选出当前条目里style为1的数据块 style_1_block = next((d for d in item.get('data', []) if d.get('style') == 1), None) if style_1_block: # 把id和目标数据合并,方便转DataFrame style_1_block['id'] = item_id target_data.append(style_1_block) # 转换为DataFrame df = pd.DataFrame(target_data) print(df.head())
代码说明
- 遍历
data中的每个条目,通过item.get('id')获取条目标识 - 用生成器表达式快速定位
style等于1的数据块 - 将
id并入目标数据块,收集所有符合条件的数据后转为DataFrame
内容的提问来源于stack exchange,提问作者Patrick Chau
相关产品推荐
相关产品推荐

