Python中导入API数据为JSON并转DataFrame的正确方法求助
如何将TfL BikePoint API数据转为DataFrame?
嘿,我看你在处理伦敦交通局的BikePoint API数据时,想把响应转成JSON再转成DataFrame却碰到了问题。其实不用绕弯路,requests和pandas已经提供了很便捷的处理方式,给你一步步说清楚:
第一步:正确解析API响应为JSON格式
你之前打印了r.text的片段,但其实requests库自带了json()方法,可以直接把符合JSON格式的响应转换成Python的列表/字典,不用手动去处理字符串解析的问题,既方便又能避免格式错误。
第二步:处理嵌套的字段(关键!)
观察API返回的数据,每个自行车点的详细属性都存在additionalProperties这个嵌套列表里,如果直接转DataFrame,这一列会是列表类型,没法直接查看和使用核心数据(比如自行车数量、空泊位数量)。所以我们需要把这个嵌套列表里的key和value提取出来,转成平级的键值对,再和顶层字段合并。
完整可运行代码
import requests as rq import pandas as pd # 发送API请求并直接解析JSON响应 response = rq.get('https://api.tfl.gov.uk/BikePoint') bike_point_list = response.json() # 预处理数据,展开嵌套的属性 processed_records = [] for point in bike_point_list: # 提取顶层的基础信息(排除嵌套的additionalProperties) base_info = {key: value for key, value in point.items() if key != 'additionalProperties'} # 将嵌套的additionalProperties转为字典 properties = {prop['key']: prop['value'] for prop in point['additionalProperties']} # 合并基础信息和属性字典 processed_records.append({**base_info, **properties}) # 转换为DataFrame bike_df = pd.DataFrame(processed_records) # 查看核心字段的前几行数据验证结果 print(bike_df[['id', 'commonName', 'TerminalName', 'NbBikes', 'NbEmptyDocks']].head())
为什么你的原有方式没达到预期?
你之前只打印了r.text的前1000字符,虽然响应头显示是JSON,但如果直接用json.loads(r.text)也能解析,但response.json()会自动处理响应编码、内容类型验证这些细节,更安全可靠。另外,没处理嵌套字段的话,转出来的DataFrame会有一列是列表,没法直接查看每个站点的核心运营数据,失去了转DataFrame的意义。
内容的提问来源于stack exchange,提问作者Alexa
相关产品推荐
相关产品推荐

