如何用Python将API获取的str与float数据合并为DataFrame并导出至谷歌表格
Python API数据处理与DataFrame构建方案
一、优化单次JSON请求提取所有数据
你目前每次提取字段都重复调用response.json(),这会重复解析JSON数据,既低效又冗余。正确的做法是一次性解析JSON并提取data层数据,再从该数据中获取所有字段:
import datetime import pandas as pd import requests # 假设使用requests库发起API请求 # 发起API请求并一次性解析核心数据 response = requests.get("你的智能设备API接口地址") api_data = response.json()['data'] # 仅解析一次JSON,提取data层级的所有数据 # 从已解析的api_data中提取各字段 t1me = datetime.datetime.fromtimestamp(api_data['time']).strftime("%Y-%m-%d %H:%M:%S") co2 = float(api_data['co2']) humidity = float(api_data['humidity']) pressure = float(api_data['pressure']) temp = float(api_data['temp']) voc = float(api_data['voc'])
这样既减少了重复解析的性能损耗,也让代码更简洁易维护。
二、构建目标结构的DataFrame
有两种简洁的方式生成你需要的DataFrame结构:
方法1:字典映射法(推荐)
直接构造与目标列名对应的字典,值为列表形式(支持后续追加多行数据):
# 构造匹配目标列名的数据字典 record_dict = { "Datetime": [t1me], "Temp": [temp], "Humidity": [humidity], "Pressure": [pressure], "CO2": [co2], "VOC": [voc] } # 生成DataFrame df = pd.DataFrame(record_dict)
方法2:行数据列表法
构造单行数据列表,同时指定列名:
# 构造单行数据,顺序与目标列名对应 row_data = [[t1me, temp, humidity, pressure, co2, voc]] # 指定列名生成DataFrame df = pd.DataFrame(row_data, columns=["Datetime", "Temp", "Humidity", "Pressure", "CO2", "VOC"])
执行后,df的结构完全符合你的需求:
| Datetime | Temp | Humidity | Pressure | CO2 | VOC |
|---|---|---|---|---|---|
| 2023-06-23 13:50:14 | 18.9 | 55.0 | 1003.3 | 768.0 | 46.0 |
补充:定时调用的实现
如果要实现每5分钟执行一次API请求与数据存储,可以在循环中加入休眠逻辑:
import time while True: # 这里放入上述API请求、DataFrame构建、导出到谷歌表格的代码 time.sleep(300) # 休眠300秒(5分钟)
也可以使用schedule库实现更灵活的定时调度(需先安装pip install schedule)。
内容的提问来源于stack exchange,提问作者DrPaulVella
相关产品推荐
相关产品推荐

