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

如何将爬取的ERCOT JSON数据中分散的时间字段转换为时间戳并实现数据清理与CSV导出

处理ERCOT供需数据并导出为CSV的完整方案

嘿,刚好能帮你搞定这个需求!下面是一步步的实现方法,涵盖时间戳转换、清理冗余字段和导出CSV,直接就能用:

1. 先准备好需要的库

除了requests用来爬数据,我们还需要pandas来轻松处理数据格式,以及datetime来搞定时间转换:

import requests
import pandas as pd
from datetime import datetime, timedelta

2. 爬取数据并转成DataFrame

先把数据拉下来,转成Pandas的DataFrame结构,比直接操作字典方便太多:

# 拉取ERCOT的供需数据
r = requests.get('https://www.ercot.com/api/1/services/read/dashboards/todays-outlook.json?_=1645233254068')
raw_data = r.json()

# 转换成DataFrame
df = pd.DataFrame(raw_data)

3. 把interval和hourEnding转成时间戳

ERCOT的时间字段设计有点特殊:hourEnding是24小时制的结束小时,interval是分钟数(0/5/10...55)。我们需要把这两个字段组合成完整的时间,再转成Unix时间戳:

# 这里默认数据是当天的,如果不是的话,可以从接口返回的其他字段提取日期
data_date = datetime.now().date()

# 拼接出完整的datetime对象
df['full_time'] = df.apply(lambda row: datetime.combine(
    data_date,
    datetime.min.time() + timedelta(hours=row['hourEnding'], minutes=row['interval'])
), axis=1)

# 转成秒级时间戳(要毫秒的话就乘1000再转int)
df['timestamp'] = df['full_time'].apply(lambda x: int(x.timestamp()))

# 用完临时的full_time字段就删掉
df = df.drop(columns=['full_time'])

4. 清理掉无用的字段

直接删掉dstFlag和forecast这两个不需要的列就行:

df = df.drop(columns=['dstFlag', 'forecast'])

5. 整理字段并导出CSV

最后只保留我们需要的timestamp、capacity、demand,然后导出成CSV文件:

# 调整列的顺序(可选,按你想要的顺序来)
final_data = df[['timestamp', 'capacity', 'demand']]

# 导出CSV,index=False是为了不把DataFrame的索引存进去
final_data.to_csv('ercot_supply_demand.csv', index=False)

完整可运行代码

把所有步骤整合到一起,直接复制就能跑:

import requests
import pandas as pd
from datetime import datetime, timedelta

# 1. 爬取原始数据
r = requests.get('https://www.ercot.com/api/1/services/read/dashboards/todays-outlook.json?_=1645233254068')
raw_data = r.json()

# 2. 转换为DataFrame
df = pd.DataFrame(raw_data)

# 3. 转换时间字段为时间戳
data_date = datetime.now().date()
df['full_time'] = df.apply(lambda row: datetime.combine(
    data_date,
    datetime.min.time() + timedelta(hours=row['hourEnding'], minutes=row['interval'])
), axis=1)
df['timestamp'] = df['full_time'].apply(lambda x: int(x.timestamp()))
df = df.drop(columns=['full_time'])

# 4. 移除无用字段
df = df.drop(columns=['dstFlag', 'forecast'])

# 5. 导出为CSV
final_data = df[['timestamp', 'capacity', 'demand']]
final_data.to_csv('ercot_supply_demand.csv', index=False)

print("搞定啦!数据已经保存成ercot_supply_demand.csv文件~")

小提醒

  • 日期问题:如果接口返回的不是当天的数据,你得检查下JSON里有没有日期相关的字段,比如有没有date或者类似的键,用那个来替换datetime.now().date()更准确。
  • 时间戳精度:如果需要毫秒级时间戳,把int(x.timestamp())改成int(x.timestamp() * 1000)就行。

内容的提问来源于stack exchange,提问作者user18253105

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:53:12