You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:57:13