Gridstatus#
Subpackages#
Submodules#
Package Contents#
Classes Summary#
API client for Alberta Electric System Operator (AESO) data. |
|
California Independent System Operator (CAISO) |
|
Electric Reliability Council of Texas (ERCOT) |
|
Independent Electricity System Operator (IESO) |
|
ISO New England (ISONE) |
|
Names of LMP Markets |
|
Midcontinent Independent System Operator (MISO) |
|
New York Independent System Operator (NYISO) |
|
PJM |
|
Southwest Power Pool (SPP) |
Exceptions Summary#
Functions#
|
Get an ISO by its id |
|
List available ISOs |
|
Load a single DataFrame for same schema csv files in a folder |
Contents#
- class gridstatus.AESO(api_key: str | None = None)[source]#
API client for Alberta Electric System Operator (AESO) data.
Handles authentication and provides methods to access various AESO datasets including supply and demand, market data, and operational information.
Initialize the AESO API client.
- Parameters:
api_key – AESO API key. If not provided, will try to get from AESO_API_KEY environment variable.
Attributes
api_key
None
base_url
default_headers
None
default_timezone
‘US/Mountain’
HISTORICAL_FORECAST_EARLIEST
None
HISTORICAL_FORECAST_LATEST
None
MAX_NAVIGATION_ATTEMPTS
100
REQUEST_TIMEOUT
(10, 120)
Methods
get_asset_list(→ pandas.DataFrame)Get list of assets in the AESO system.
get_daily_average_pool_price(→ pandas.DataFrame)Get daily average pool price data with on-peak and off-peak breakdowns.
get_forecast_pool_price(→ pandas.DataFrame)Get pool price data.
get_fuel_mix(→ pandas.DataFrame)Get current generation by fuel type.
get_generator_outages_hourly(→ pandas.DataFrame)Get hourly generator outage data.
get_interchange(→ pandas.DataFrame)Get current interchange flows with neighboring regions.
get_load(→ pandas.DataFrame)Get current load data.
get_load_forecast(→ pandas.DataFrame)Get load forecast data.
get_pool_price(→ pandas.DataFrame)Get pool price data.
get_reserves(→ pandas.DataFrame)Get current reserve data.
get_solar_10_min(→ pandas.DataFrame)Get actual solar generation data with 10-minute intervals.
get_solar_forecast_12_hour(→ pandas.DataFrame)Get 12-hour solar forecast data.
get_solar_forecast_7_day(→ pandas.DataFrame)Get 7-day solar forecast data.
get_solar_hourly(→ pandas.DataFrame)Get actual solar generation data with hourly intervals.
get_supply_and_demand(→ pandas.DataFrame)Get current supply and demand summary data.
get_system_marginal_price(→ pandas.DataFrame)Get system marginal price data.
get_transmission_outages(→ pandas.DataFrame)Get transmission outages data.
get_unit_status(→ pandas.DataFrame)Get current unit status data for all assets in the AESO system.
get_wind_10_min(→ pandas.DataFrame)Get actual wind generation data with 10-minute intervals.
get_wind_forecast_12_hour(→ pandas.DataFrame)Get 12-hour wind forecast data.
get_wind_forecast_7_day(→ pandas.DataFrame)Get 7-day wind forecast data.
get_wind_hourly(→ pandas.DataFrame)Get actual wind generation data with hourly intervals.
- get_asset_list(asset_id: str | None = None, pool_participant_id: str | None = None, operating_status: str | None = None, asset_type: str | None = None) pandas.DataFrame[source]#
Get list of assets in the AESO system.
- Parameters:
asset_id – Filter by specific asset ID
pool_participant_id – Filter by pool participant ID
operating_status – Filter by operating status
asset_type – Filter by asset type
- Returns:
DataFrame containing asset information
- get_daily_average_pool_price(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get daily average pool price data with on-peak and off-peak breakdowns.
On-peak hours are defined as hours ending 8 through 23 (inclusive). Off-peak hours are all other hours.
- Returns:
DataFrame containing daily average price data
- get_forecast_pool_price(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get pool price data.
- Returns:
DataFrame containing pool price data
- get_fuel_mix() pandas.DataFrame[source]#
Get current generation by fuel type.
- Returns:
DataFrame containing generation data by fuel type, with each fuel type as a column containing its net generation value
- get_generator_outages_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get hourly generator outage data.
- Parameters:
date – Start date for the data. Can be “latest” to get current data.
end – End date for the data. If not provided, will get 24 months of data.
verbose – Whether to print verbose output.
- Returns:
DataFrame containing generator outage data
- get_interchange() pandas.DataFrame[source]#
Get current interchange flows with neighboring regions.
- Returns:
DataFrame containing interchange data with separate columns for each region’s flow and a net interchange flow column
- get_load(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get current load data.
- Returns:
DataFrame containing load data
- get_load_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get load forecast data.
The AESO publishes load forecasts daily at 7am Mountain Time. The forecast covers the next 13 days. The publish time is determined as follows:
For historical data: 7am on the day of the interval if interval is after 7am, otherwise 7am the previous day
For future data: 7am today (if after 7am) or 7am yesterday (if before 7am)
- Returns:
DataFrame containing load forecast data with publish times.
- get_pool_price(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get pool price data.
- Returns:
DataFrame containing pool price data
- get_reserves() pandas.DataFrame[source]#
Get current reserve data.
- Returns:
DataFrame containing reserve information
- get_solar_10_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get actual solar generation data with 10-minute intervals.
- Returns:
DataFrame containing actual solar generation data with 10-minute intervals
- get_solar_forecast_12_hour(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get 12-hour solar forecast data.
- Returns:
DataFrame containing 12-hour solar forecast data with min, most likely, and max values
- get_solar_forecast_7_day(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get 7-day solar forecast data.
- Returns:
DataFrame containing 7-day solar forecast data with min, most likely, and max values
- get_solar_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get actual solar generation data with hourly intervals.
- Returns:
DataFrame containing actual solar generation data with hourly intervals
- get_supply_and_demand() pandas.DataFrame[source]#
Get current supply and demand summary data.
- Returns:
DataFrame containing current supply and demand information
- get_system_marginal_price(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get system marginal price data.
- Returns:
DataFrame containing system marginal price data with minutely intervals
- get_transmission_outages(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None) pandas.DataFrame[source]#
Get transmission outages data.
- Parameters:
date – Start date for the data. Can be “latest” to get current data.
end – End date for the data. If not provided, will get data for the specified date.
- Returns:
DataFrame containing transmission outage data
- get_unit_status(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], verbose: bool = False) pandas.DataFrame[source]#
Get current unit status data for all assets in the AESO system.
- Returns:
Time: Timestamp of the data
Asset: Asset identifier
Fuel Type: Type of fuel used
Sub Fuel Type: Sub-category of fuel type
Maximum Capability: Maximum generation capability in MW
Net Generation: Current net generation in MW
Dispatched Contingency Reserve: Amount of contingency reserve dispatched in MW
- Return type:
DataFrame containing unit status data with columns
- get_wind_10_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get actual wind generation data with 10-minute intervals.
- Returns:
DataFrame containing actual wind generation data with 10-minute intervals
- get_wind_forecast_12_hour(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get 12-hour wind forecast data.
- Returns:
DataFrame containing 12-hour wind forecast data with min, most likely, and max values
- get_wind_forecast_7_day(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get 7-day wind forecast data.
- Returns:
DataFrame containing 7-day wind forecast data with min, most likely, and max values
- get_wind_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get actual wind generation data with hourly intervals.
- Returns:
DataFrame containing actual wind generation data with hourly intervals
- class gridstatus.CAISO[source]#
Bases:
gridstatus.base.ISOBaseCalifornia Independent System Operator (CAISO)
Attributes
default_timezone
‘US/Pacific’
interconnection_homepage
iso_id
‘caiso’
markets
None
name
‘California ISO’
status_homepage
trading_hub_locations
[‘TH_NP15_GEN-APND’, ‘TH_SP15_GEN-APND’, ‘TH_ZP26_GEN-APND’]
Methods
get_aggregated_generation_outages(→ pandas.DataFrame)Return hourly aggregated generator outages by trading hub.
get_as_prices(→ pandas.DataFrame)Return AS prices for a given date for each region
get_as_procurement(→ pandas.DataFrame)Get ancillary services procurement data from CAISO.
get_caiso_renewables_report(→ dict[str, pandas.DataFrame])Fetches the CAISO daily renewable report for a given date and extracts data from
Return curtailed non-operational generator report for a given date.
get_curtailment(→ pandas.DataFrame)Return curtailment data for a given date
get_curtailment_legacy(→ pandas.DataFrame)Return curtailment data for a given date.
get_edam_wind_solar_forecast(→ pandas.DataFrame)Day-ahead, hourly, BAA-level wind and solar forecasts for balancing
get_fuel_mix(→ pandas.DataFrame)Get fuel mix in 5 minute intervals for a provided day.
get_fuel_regions(→ pandas.DataFrame)Retrieves the (mostly static) list of fuel regions with associated data.
get_gas_prices(date[, end, fuel_region_id, sleep, verbose])Return gas prices at a previous date
get_ghg_allowance(date[, end, sleep, verbose])Return ghg allowance at a previous date
get_interconnection_queue(→ pandas.DataFrame)Get 5-min intertie constraint shadow prices from CAISO.
get_interval_nomogram_branch_shadow_prices_real_time_5_min(...)Get 5-min nomogram/branch shadow prices from CAISO.
get_ir_rc_prices(→ pandas.DataFrame)Return day-ahead nodal Imbalance Reserve and Reliability Capacity prices.
get_ir_rc_requirements_awards_2da(→ pandas.DataFrame)Return two-day-ahead hourly Imbalance Reserve requirements by BAA.
get_ir_rc_requirements_awards_3da(→ pandas.DataFrame)Return three-day-ahead hourly Imbalance Reserve requirements by BAA.
get_ir_rc_requirements_awards_dam(→ pandas.DataFrame)Return day-ahead hourly Imbalance Reserve requirements and
get_lmp(date, market[, locations, sleep, end, verbose])Deprecated. Use the per-dataset methods instead:
get_lmp_day_ahead_hourly(→ pandas.DataFrame)Get day-ahead hourly LMPs for all nodes.
get_lmp_hasp_15_min(→ pandas.DataFrame)Get LMP HASP 15-min data from CAISO.
get_lmp_real_time_15_min(→ pandas.DataFrame)Get real-time 15-minute LMPs for all nodes.
get_lmp_real_time_5_min(→ pandas.DataFrame)Get real-time 5-minute LMPs for all nodes.
Get LMP scheduling point tie combination 5-min data from CAISO.
get_load(→ pandas.DataFrame)Return load at a previous date in 5 minute intervals
get_load_forecast(→ pandas.DataFrame)get_load_forecast_15_min(→ pandas.DataFrame)Returns 15-minute load forecast from the Real-Time Pre-Dispatch Market
get_load_forecast_5_min(→ pandas.DataFrame)Returns 5-minute load forecast from the Real-Time Market
get_load_forecast_day_ahead(→ pandas.DataFrame)Returns hourly day-ahead load forecast
get_load_forecast_seven_day_ahead(→ pandas.DataFrame)Returns hourly seven-day-ahead load forecast
get_load_forecast_two_day_ahead(→ pandas.DataFrame)Returns hourly two-day-ahead load forecast
get_load_hourly(→ pandas.DataFrame)Returns actual load values
Returns 15-minute nomogram/branch shadow price forecast from the Real-Time Pre-Dispatch Market.
Returns hourly day-ahead nomogram/branch shadow price forecast.
Returns nomogram/branch shadow price HASP hourly data from CAISO.
get_oasis_dataset(→ pandas.DataFrame)Return data from OASIS for a given dataset
get_pnodes(→ pandas.DataFrame)get_price_corrections(→ pandas.DataFrame)Return CAISO price corrections (OASIS
PRC_CORR_GRPsummary).get_raw_interconnection_queue(→ pandas.DataFrame)get_renewables_forecast_dam(→ pandas.DataFrame)Return DAM renewable forecast in hourly intervals
get_renewables_forecast_hasp(→ pandas.DataFrame)Get solar and wind generation HASP hourly data from CAISO.
get_renewables_forecast_rtd(→ pandas.DataFrame)Get RTD renewable forecast from CAISO.
get_renewables_forecast_rtpd(→ pandas.DataFrame)Get RTPD renewable forecast from CAISO.
get_renewables_hourly(→ pandas.DataFrame)Get wind and solar hourly actuals from CAISO.
get_seven_day_resource_adequacy_outlook(→ pandas.DataFrame)Seven-day resource adequacy outlook in 5-minute intervals.
get_stats(→ dict)get_status(→ str)Get Current Status of the Grid. Only date="latest" is supported
get_storage(→ pandas.DataFrame)Return storage charging or discharging for today in 5 minute intervals
get_storage_awards_fmm(→ pandas.DataFrame)Energy and ancillary services awards for storage in the FMM (15-minute).
get_storage_awards_ifm(→ pandas.DataFrame)Energy and AS awards for storage in the IFM (energy at 5-minute, AS hourly).
get_storage_awards_rtd(→ pandas.DataFrame)Energy awards for storage in RTD (5-minute).
get_storage_energy_awards_ruc(→ pandas.DataFrame)RUC energy awards to storage (5-minute).
get_storage_energy_bids_fmm(→ pandas.DataFrame)FMM energy bid-in capacity by price bin (15-minute).
get_storage_energy_bids_ifm(→ pandas.DataFrame)IFM energy bid-in capacity by price bin (hourly).
get_storage_soc_fmm(→ pandas.DataFrame)State of charge for storage in the FMM (15-minute, standalone resources).
get_storage_soc_hourly(→ pandas.DataFrame)Hourly IFM and RUC state of charge (see
build_storage_soc_hourly).get_storage_soc_rtd(→ pandas.DataFrame)State of charge for storage in RTD (5-minute, standalone resources).
Get CAISO System Load and Resource Schedules Day-Ahead data from CAISO.
Get CAISO System Load and Resource Schedules HASP data from CAISO.
Get CAISO System Load and Resource Schedules Real Time data from CAISO.
Get CAISO System Load and Resource Schedules RUC data from CAISO.
get_tie_flows_real_time(→ pandas.DataFrame)Return real time tie flow data.
get_tie_flows_real_time_15_min(→ pandas.DataFrame)list_oasis_datasets([dataset])List all available OASIS datasets and their parameters.
- get_aggregated_generation_outages(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Return hourly aggregated generator outages by trading hub.
Outage MW is reported with an
Aggregatedhub-total column plus fuel-category breakdown columns where CAISO provides them. Some hubs (e.g. ZP26) publish only the aggregate; others publish Thermal, Renewable, Hydro, and sometimes Not Available.Aggregateduses the published value when present, otherwise the sum of the breakdown columns.- Parameters:
date (datetime.date, str) – date to return data
end (datetime.date, str) – last date of range to return data. If None, returns only date. Defaults to None.
sleep (int, optional) – seconds to sleep between requests. Defaults to 4.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame with one row per (Interval Start, Publish Time, Trading Hub), with outage MW by fuel category in separate columns.
- Return type:
pandas.DataFrame
- get_as_prices(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, market: str = 'DAM', sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Return AS prices for a given date for each region
- Parameters:
date (datetime.date, str) – date to return data
end (datetime.date, str) – last date of range to return data. If None, returns only date. Defaults to None.
market (str) – DAM or HASP. Defaults to DAM.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame of AS prices
- Return type:
pandas.DataFrame
- get_as_procurement(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, market: str = 'DAM', sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Get ancillary services procurement data from CAISO.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data. If None, returns only date. Defaults to None.
market (str, optional) – DAM or RTM. Defaults to “DAM”.
sleep (int, optional) – number of seconds to sleep between requests. Defaults to 4.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame of ancillary services data
- Return type:
pandas.DataFrame
- get_caiso_renewables_report(date: pandas.Timestamp) dict[str, pandas.DataFrame][source]#
Fetches the CAISO daily renewable report for a given date and extracts data from all the charts into wide dataframes.
- get_curtailed_non_operational_generator_report(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- Return curtailed non-operational generator report for a given date.
Earliest available date is June 17, 2021.
- Parameters:
date (str, pd.Timestamp) – date to return data
end (str, pd.Timestamp, optional) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame of curtailed non-operational generator report
- Return type:
pandas.DataFrame
Notes
Column glossary: http://www.caiso.com/market/Pages/OutageManagement/Curtailed-OperationalGeneratorReportGlossary.aspx
If requesting multiple days, you may want to run the following to remove outages that get reported across multiple days:
df.drop_duplicates( subset=["OUTAGE MRID", "CURTAILMENT START DATE TIME"], keep="last", )
- get_curtailment(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Return curtailment data for a given date
- Parameters:
date (datetime.date, str) – date to return data
end (datetime.date, str) – last date of range to return data. If None, returns only date. Defaults to None.
verbose – print out url being fetched. Defaults to False.
- Returns:
A DataFrame of curtailment data
- Return type:
pandas.DataFrame
- get_curtailment_legacy(date: str | pandas.Timestamp, verbose: bool = False) pandas.DataFrame[source]#
Return curtailment data for a given date.
Note
Data available from June 30, 2016 to May 31, 2025. For current data, please use
get_curtailment.- Parameters:
date – Date to return data.
verbose – Print out url being fetched. Defaults to False.
- Returns:
A DataFrame of curtailment data.
- get_edam_wind_solar_forecast(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Day-ahead, hourly, BAA-level wind and solar forecasts for balancing areas participating in the extended day-ahead market (EDAM).
Data at: http://oasis.caiso.com/mrioasis/logon.do at Energy > EDAM > Wind and Solar Forecast.
Per the OASIS Publications Schedule, the report is published every 30 minutes between 6:00 and 10:00 AM Pacific. The Publish Time on each row is the actual publish timestamp pulled from the
MessageHeader.TimeDateof the corresponding XML report, not a derived offset.- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
hourly EDAM wind and solar forecasts by BAA
- Return type:
pandas.DataFrame
- get_fuel_mix(date: str | pandas.Timestamp, start: str | pandas.Timestamp | None = None, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get fuel mix in 5 minute intervals for a provided day.
- Parameters:
date – “latest”, “today”, or an object that can be parsed as a datetime for the day to return data.
start – Start of date range to return. Alias for
dateparameter. Only specify one ofdateorstart.end – “today” or an object that can be parsed as a datetime for the day to return data. Only used if requesting a range of dates.
verbose – Print verbose output. Defaults to False.
- Returns:
A DataFrame with columns for Time and each fuel type.
- get_fuel_regions(verbose: bool = False) pandas.DataFrame[source]#
Retrieves the (mostly static) list of fuel regions with associated data. This file can be joined to the gas prices on Fuel Region Id
- get_gas_prices(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, fuel_region_id: str | list = 'ALL', sleep: int = 4, verbose: bool = False)[source]#
Return gas prices at a previous date
- Parameters:
date (datetime.date, str) – date to return data
end (datetime.date, str) – last date of range to return data. If None, returns only date. Defaults to None.
fuel_region_id (str, or list) – single fuel region id or list of fuel region ids to return data for. Defaults to ALL, which returns all fuel regions.
- Returns:
A DataFrame of gas prices
- Return type:
pandas.DataFrame
- get_ghg_allowance(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False)[source]#
Return ghg allowance at a previous date
- Parameters:
date (datetime.date, str) – date to return data
end (datetime.date, str) – last date of range to return data. If None, returns only date. Defaults to None.
- get_intertie_constraint_shadow_prices_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get 5-min intertie constraint shadow prices from CAISO.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched.
- Returns:
A DataFrame with the intertie constraint shadow prices
- Return type:
pandas.DataFrame
- get_interval_nomogram_branch_shadow_prices_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get 5-min nomogram/branch shadow prices from CAISO.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched.
- Returns:
A DataFrame with the shadow prices
- Return type:
pandas.DataFrame
- get_ir_rc_prices(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Return day-ahead nodal Imbalance Reserve and Reliability Capacity prices.
The Marginal Clearing Price for Reliability Capacity (RCU/RCD) is comprised of Capacity, Congestion, and Loss components, while Imbalance Reserves (IRU/IRD) only have Capacity and Congestion components (Loss is NaN).
- Parameters:
date (datetime.date, str) – date to return data
end (datetime.date, str) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame of IR/RC prices with one row per (Interval Start, Location, Product). Earliest available date is May 1, 2026.
- Return type:
pandas.DataFrame
- get_ir_rc_requirements_awards_2da(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Return two-day-ahead hourly Imbalance Reserve requirements by BAA.
- Parameters:
date (datetime.date, str) – date to return data
end (datetime.date, str) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame with one row per (Interval Start, BAA, Product, Type). Earliest available date is May 1, 2026.
- Return type:
pandas.DataFrame
- get_ir_rc_requirements_awards_3da(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Return three-day-ahead hourly Imbalance Reserve requirements by BAA.
- Parameters:
date (datetime.date, str) – date to return data
end (datetime.date, str) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame with one row per (Interval Start, BAA, Product, Type). Earliest available date is May 1, 2026.
- Return type:
pandas.DataFrame
- get_ir_rc_requirements_awards_dam(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Return day-ahead hourly Imbalance Reserve requirements and Imbalance Reserve and Reliability Capacity awards by BAA.
- Parameters:
date (datetime.date, str) – date to return data
end (datetime.date, str) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame with one row per (Interval Start, BAA, Product, Type). Earliest available date is May 1, 2026.
- Return type:
pandas.DataFrame
- get_lmp(date: str | pandas.Timestamp, market: str, locations: list = None, sleep: int = 5, end: str | pandas.Timestamp = None, verbose: bool = False)[source]#
Deprecated. Use the per-dataset methods instead:
get_lmp_real_time_5_min(),get_lmp_real_time_15_min(),get_lmp_day_ahead_hourly().
- get_lmp_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, sleep: int = 5, verbose: bool = False) pandas.DataFrame[source]#
Get day-ahead hourly LMPs for all nodes.
- get_lmp_hasp_15_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get LMP HASP 15-min data from CAISO.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame of LMP HASP 15-min data
- Return type:
pandas.DataFrame
- get_lmp_real_time_15_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, sleep: int = 5, verbose: bool = False) pandas.DataFrame[source]#
Get real-time 15-minute LMPs for all nodes.
- get_lmp_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, sleep: int = 5, verbose: bool = False) pandas.DataFrame[source]#
Get real-time 5-minute LMPs for all nodes.
- get_lmp_scheduling_point_tie_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_lmp_scheduling_point_tie_real_time_15_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_lmp_scheduling_point_tie_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get LMP scheduling point tie combination 5-min data from CAISO.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame of LMP scheduling point tie combination 5-min data
- Return type:
pandas.DataFrame
- get_load(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Return load at a previous date in 5 minute intervals
- get_load_forecast(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_load_forecast_15_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Returns 15-minute load forecast from the Real-Time Pre-Dispatch Market
- Parameters:
date (str | pd.Timestamp) – day to return
end (str | pd.Timestamp, optional) – end of date range to return. If None, returns only date. Defaults to None.
sleep (int) – seconds to sleep before returning to avoid rate limit. Defaults to 4.
verbose (bool) – print verbose output. Defaults to False.
- Returns:
DataFrame with load forecast data
- Return type:
pd.DataFrame
- get_load_forecast_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Returns 5-minute load forecast from the Real-Time Market
- Parameters:
date (str | pd.Timestamp) – day to return
end (str | pd.Timestamp, optional) – end of date range to return. If None, returns only date. Defaults to None.
sleep (int) – seconds to sleep before returning to avoid rate limit. Defaults to 4.
verbose (bool) – print verbose output. Defaults to False.
- Returns:
DataFrame with load forecast data
- Return type:
pd.DataFrame
- get_load_forecast_day_ahead(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Returns hourly day-ahead load forecast
- Parameters:
date (str | pd.Timestamp) – day to return
end (str | pd.Timestamp, optional) – end of date range to return data. If None, returns only date. Defaults to None.
sleep (int) – seconds to sleep before returning to avoid rate limit. Defaults to 4.
verbose (bool) – print verbose output. Defaults to False.
- Returns:
DataFrame with load forecast data
- Return type:
pd.DataFrame
- get_load_forecast_seven_day_ahead(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Returns hourly seven-day-ahead load forecast
- Parameters:
date (str | pd.Timestamp) – day to return
end (str | pd.Timestamp, optional) – end of date range to return data. If None, returns only date. Defaults to None.
sleep (int) – seconds to sleep before returning to avoid rate limit. Defaults to 4.
verbose (bool) – print verbose output. Defaults to False.
- Returns:
DataFrame with load forecast data
- Return type:
pd.DataFrame
- get_load_forecast_two_day_ahead(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Returns hourly two-day-ahead load forecast
- Parameters:
date (str | pd.Timestamp) – day to return
end (str | pd.Timestamp, optional) – end of date range to return data. If None, returns only date. Defaults to None.
sleep (int) – seconds to sleep before returning to avoid rate limit. Defaults to 4.
verbose (bool) – print verbose output. Defaults to False.
- Returns:
DataFrame with load forecast data
- Return type:
pd.DataFrame
- get_load_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Returns actual load values
- Parameters:
date (str | pd.Timestamp) – day to return
end (str | pd.Timestamp, optional) – end of date range to return. If None, returns only date. Defaults to None.
sleep (int) – seconds to sleep before returning to avoid rate limit. Defaults to 4.
verbose (bool) – print verbose output. Defaults to False.
- Returns:
DataFrame with actual load data
- Return type:
pd.DataFrame
- get_nomogram_branch_shadow_price_forecast_15_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns 15-minute nomogram/branch shadow price forecast from the Real-Time Pre-Dispatch Market.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched.
- Returns:
A DataFrame with the shadow price forecast
- Return type:
pandas.DataFrame
- get_nomogram_branch_shadow_prices_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns hourly day-ahead nomogram/branch shadow price forecast.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched.
- Returns:
A DataFrame with the shadow price forecast
- Return type:
pandas.DataFrame
- get_nomogram_branch_shadow_prices_hasp_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns nomogram/branch shadow price HASP hourly data from CAISO.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched.
- Returns:
A DataFrame with the shadow price HASP data
- Return type:
pandas.DataFrame
- get_oasis_dataset(dataset: str, date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, params: dict | None = None, raw_data: bool = True, sleep: int = 5, verbose: bool = False) pandas.DataFrame[source]#
Return data from OASIS for a given dataset
- Parameters:
dataset (str) – dataset to return data for. See CAISO.list_oasis_datasets for supported datasets
date (str, pd.Timestamp) – date to return data
end (str, pd.Timestamp, optional) – last date of range to return data. If None, returns only date. Defaults to None.
params (dict) – dictionary of parameters to pass to dataset. See CAISO.list_oasis_datasets for supported parameters
raw_data (bool, optional) – return raw data from OASIS. Defaults to True.
sleep (int, optional) – number of seconds to sleep between requests. Defaults to 5.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Raises:
ValueError – if parameter is not supported for dataset
ValueError – if parameter value is not supported for dataset
- Returns:
A DataFrame of data from OASIS
- Return type:
pd.DataFrame
- get_price_corrections(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, sleep: int = 4, verbose: bool = False) pandas.DataFrame[source]#
Return CAISO price corrections (OASIS
PRC_CORR_GRPsummary).CAISO reprices an operating day when it detects an error in published prices and posts a structured summary of every correction to the
PRC_CORR_GRPreport group. Each row describes a single corrected interval: the trade date (operating day) and market that were corrected, the hour ending and interval, the correction method and reason, and the time the correction was generated.The report is keyed by trade date and serves one day per request, so a range is fetched one day at a time. A correction is typically generated several days to two weeks after the trade date, so
Report Generatedis the column to use when selecting recently issued corrections.- Parameters:
date (datetime.date, str) – start of the trade-date range.
end (datetime.date, str) – end of the trade-date range. If None, returns only
date. Defaults to None.sleep (int) – seconds to sleep between requests to avoid the OASIS rate limit. Defaults to 4.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
one row per corrected interval with columns
Trade Date(the corrected operating day),Hour Ending,Interval,Market(e.g.DAM,RTD,RTPD),Affected Area,Correction Method,Correction Count,Energy Type,Correction ReasonandReport Generated(when the correction was issued).Trade DateandReport Generatedare Pacific-localized timestamps.- Return type:
pandas.DataFrame
- Raises:
NoDataFoundException – if no corrections were issued for the range.
- get_renewables_forecast_dam(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Return DAM renewable forecast in hourly intervals
Data at: http://oasis.caiso.com/mrioasis/logon.do at System Demand > DAM Renewable Forecast
- get_renewables_forecast_hasp(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get solar and wind generation HASP hourly data from CAISO.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame of solar and wind generation HASP hourly data
- Return type:
pandas.DataFrame
- get_renewables_forecast_rtd(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get RTD renewable forecast from CAISO.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame of RTD renewable forecast
- Return type:
pandas.DataFrame
- get_renewables_forecast_rtpd(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get RTPD renewable forecast from CAISO.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame of RTPD renewable forecast
- Return type:
pandas.DataFrame
- get_renewables_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get wind and solar hourly actuals from CAISO.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame of wind and solar hourly actuals
- Return type:
pandas.DataFrame
- get_seven_day_resource_adequacy_outlook(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Seven-day resource adequacy outlook in 5-minute intervals.
Source:
/outlook/history/{{yyyymmdd}}/rtm_forecast_7day.csv(historical) or current outlook for today.The CSV
Timecolumn marks interval end;Interval Startis five minutes prior.Publish Timeis midnight Pacific on the publication date encoded in the URL path.
- get_status(date: str = 'latest', verbose: bool = False) str[source]#
Get Current Status of the Grid. Only date=”latest” is supported
Known possible values: Normal, Restricted Maintenance Operations, Flex Alert
- get_storage(date: str | pandas.Timestamp, verbose: bool = False) pandas.DataFrame[source]#
Return storage charging or discharging for today in 5 minute intervals
Negative means charging, positive means discharging
- Parameters:
date (datetime.date, str) – date to return data
- get_storage_awards_fmm(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Energy and ancillary services awards for storage in the FMM (15-minute).
- get_storage_awards_ifm(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Energy and AS awards for storage in the IFM (energy at 5-minute, AS hourly).
- get_storage_awards_rtd(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Energy awards for storage in RTD (5-minute).
- get_storage_energy_awards_ruc(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
RUC energy awards to storage (5-minute).
- get_storage_energy_bids_fmm(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
FMM energy bid-in capacity by price bin (15-minute).
- get_storage_energy_bids_ifm(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
IFM energy bid-in capacity by price bin (hourly).
- get_storage_soc_fmm(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
State of charge for storage in the FMM (15-minute, standalone resources).
- get_storage_soc_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Hourly IFM and RUC state of charge (see
build_storage_soc_hourly).
- get_storage_soc_rtd(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
State of charge for storage in RTD (5-minute, standalone resources).
- get_system_load_and_resource_schedules_day_ahead(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get CAISO System Load and Resource Schedules Day-Ahead data from CAISO.
- get_system_load_and_resource_schedules_hasp(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get CAISO System Load and Resource Schedules HASP data from CAISO.
- get_system_load_and_resource_schedules_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get CAISO System Load and Resource Schedules Real Time data from CAISO.
- get_system_load_and_resource_schedules_ruc(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get CAISO System Load and Resource Schedules RUC data from CAISO.
- get_tie_flows_real_time(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Return real time tie flow data.
- Parameters:
date (str | pd.Timestamp) – date to return data
end (str | pd.Timestamp | None, optional) – last date of range to return data. If None, returns only date. Defaults to None.
verbose (bool, optional) – print out url being fetched. Defaults to False.
- Returns:
A DataFrame of real time tie flow data
- Return type:
pd.DataFrame
- class gridstatus.Ercot[source]#
Bases:
gridstatus.base.ISOBaseElectric Reliability Council of Texas (ERCOT)
Attributes
ACTUAL_LOADS_FORECAST_ZONES_URL_FORMAT
‘https://www.ercot.com/content/cdr/html/{timestamp}_actual_loads_of_forecast_zones.html’
ACTUAL_LOADS_WEATHER_ZONES_URL_FORMAT
‘https://www.ercot.com/content/cdr/html/{timestamp}_actual_loads_of_weather_zones.html’
BASE
default_timezone
‘US/Central’
ESR_CORRECTION_DATES
None
interconnection_homepage
‘http://mis.ercot.com/misapp/GetReports.do?reportTypeId=15933’
iso_id
‘ercot’
LOAD_HISTORICAL_MAX_DAYS
14
location_types
None
markets
None
name
‘Electric Reliability Council of Texas’
OPERATIONS_MESSAGES_URL
‘https://www.ercot.com/services/comm/mkt_notices/opsmessages’
PLANNED_OUTAGE_CAPACITY_COLUMNS
[‘Interval Start’, ‘Interval End’, ‘Publish Time’, ‘POL Non IRR Non PUN’, ‘Approved POL Non IRR Non PUN’, ‘Received POL Non IRR Non PUN’, ‘POL IRR’, ‘Approved POL IRR’, ‘Received POL IRR’, ‘POL ESR’, ‘Approved POL ESR’, ‘Received POL ESR’]
SCED_RESOURCE_AS_OFFERS_SUPPLEMENTAL_END
None
SCED_RESOURCE_AS_OFFERS_SUPPLEMENTAL_START
None
SCED_SUPPLEMENTAL_CORRECTION_END
None
SCED_SUPPLEMENTAL_CORRECTION_START
None
status_homepage
‘https://www.ercot.com/gridmktinfo/dashboards/gridconditions’
WAYBACK_CDX_URL
WAYBACK_SNAP_URL
‘https://web.archive.org/web/{timestamp}/{url}’
Methods
ambiguous_based_on_dstflag(→ pandas.Series)Get the bid price and name of the Load Resource submitting the
get_3_day_highest_price_offered_sced(→ pandas.DataFrame)Get the offer price and name of the Generation Resource submitting
get_60_day_dam_disclosure(→ dict)Get 60 day DAM Disclosure data. Returns a dict with keys
get_60_day_sced_disclosure(→ dict)Get 60 day SCED Disclosure data
get_aggregate_gen_summary_2_day(→ pandas.DataFrame)Get 2-Day Aggregate Generation Summary by disclosure area.
get_aggregate_load_summary_2_day(→ pandas.DataFrame)Get 2-Day Aggregate Load Summary by disclosure area.
get_aggregate_output_schedule_2_day(→ pandas.DataFrame)Get 2-Day Aggregate Output Schedules by disclosure area.
get_as_demand_curves_daily_ruc(→ pandas.DataFrame)Get Daily RUC Ancillary Service Demand Curves
get_as_demand_curves_dam_and_sced(→ pandas.DataFrame)Get Ancillary Service Demand Curves
get_as_demand_curves_hourly_ruc(→ pandas.DataFrame)Get Hourly RUC Ancillary Service Demand Curves
get_as_demand_curves_weekly_ruc(→ pandas.DataFrame)Get Weekly RUC Ancillary Service Demand Curves
get_as_deployment_factors_daily_ruc(→ pandas.DataFrame)Get Daily RUC Ancillary Service Deployment Factors
get_as_deployment_factors_hourly_ruc(→ pandas.DataFrame)Get Hourly RUC Ancillary Service Deployment Factors
get_as_deployment_factors_projected(→ pandas.DataFrame)Get Projected Ancillary Service Deployment Factors
get_as_deployment_factors_weekly_ruc(→ pandas.DataFrame)Get Weekly RUC Ancillary Service Deployment Factors
get_as_monitor(→ pandas.DataFrame)Get Ancillary Service Capacity Monitor.
get_as_plan(→ pandas.DataFrame)Ancillary Service requirements by type and quantity for each hour of the
get_as_prices(→ pandas.DataFrame)Get ancillary service clearing prices in hourly intervals in Day Ahead Market
get_as_reports(→ pandas.DataFrame)Get Ancillary Services Reports.
get_as_reports_dam(→ pandas.DataFrame)Get Day-Ahead Market Ancillary Services Reports.
get_as_reports_sced(→ pandas.DataFrame)Get 2-Day SCED Ancillary Service Disclosure Reports.
get_as_total_capability(→ pandas.DataFrame)Get Total Capability of Resources Available to Provide Ancillary Service
Retrieves the forecasted demand (Load Forecast) and the forecasted available
get_capacity_committed(→ pandas.DataFrame)Retrieves the actual committed capacity (the amount of power available from
get_capacity_forecast(→ pandas.DataFrame)Retrieves the forecasted committed capacity (Committed Capacity) and the
get_ccp_resource_names(→ pandas.DataFrame)get_dam_asdc_aggregated(→ pandas.DataFrame)Get DAM Aggregated Ancillary Service Offer Curve (NP4-19-CD).
get_dam_price_corrections(→ pandas.DataFrame)Get DAM Price Corrections
get_dam_spp(→ pandas.DataFrame)Get Historical DAM Settlement Point Prices(SPPs)
get_dam_system_lambda(→ pandas.DataFrame)Get Day-Ahead Market System Lambda
get_dam_total_as_sold(→ pandas.DataFrame)Get DAM Total Ancillary Services Sold
get_dam_total_energy_purchased(→ pandas.DataFrame)Get DAM Total Energy Purchased
get_dam_total_energy_sold(→ pandas.DataFrame)Get DAM Total Energy Sold
get_energy_storage_resources(→ pandas.DataFrame)Get energy storage resources.
get_fuel_mix(→ pandas.DataFrame)Get fuel mix 5 minute intervals
get_fuel_mix_detailed(→ pandas.DataFrame)The fuel mix with gen, hsl, and seasonal capacity for each fuel type.
get_highest_price_as_offer_selected(→ pandas.DataFrame)Get the offer price and the name of the Entity submitting
get_highest_price_as_offer_selected_dam(→ pandas.DataFrame)Get the offer price and the name of the Entity submitting
Get the offer price and the name of the Entity submitting
get_hourly_load_post_settlements(→ pandas.DataFrame)Get historical hourly load data from ERCOT's load archives.
get_hourly_resource_outage_capacity(→ pandas.DataFrame)Hourly Resource Outage Capacity report sourced
get_hub_name_dc_ties(→ pandas.DataFrame)get_indicative_lmp_by_settlement_point(→ pandas.DataFrame)get_indicative_mcpc_rtd(→ pandas.DataFrame)Get RTD Indicative Real-Time Market Clearing Prices for Capacity
get_interconnection_queue(→ pandas.DataFrame)Get interconnection queue for ERCOT
get_lmp(→ pandas.DataFrame)Deprecated. Use the per-dataset methods instead:
get_lmp_by_bus(→ pandas.DataFrame)Get real-time SCED LMPs by electrical bus (every five minutes).
get_lmp_by_bus_dam(→ pandas.DataFrame)Get Day-Ahead Market (DAM) LMPs by Electrical Bus
get_lmp_by_bus_price_corrections(→ pandas.DataFrame)Get LMP corrections by electrical bus for each SCED run.
get_lmp_by_settlement_point(→ pandas.DataFrame)Get real-time SCED LMPs by settlement point (every five minutes).
Get LMP corrections by settlement point for each SCED run.
get_load(→ pandas.DataFrame)Get load for a date
get_load_by_forecast_zone(→ pandas.DataFrame)Get hourly load for ERCOT forecast zones
get_load_by_weather_zone(→ pandas.DataFrame)Get hourly load for ERCOT weather zones
get_load_forecast(→ pandas.DataFrame)Returns load forecast of specified forecast type.
get_load_forecast_by_model(→ pandas.DataFrame)Get Seven-Day Load Forecast by Model and Weather Zone.
get_mcpc_dam(→ pandas.DataFrame)Get Market Clearing Prices for Capacity (MCPC) from the Day-Ahead Market
get_mcpc_dam_price_corrections(→ pandas.DataFrame)Get Market Clearing Price for Capacity (MCPC) corrections for DAM.
get_mcpc_real_time_15_min(→ pandas.DataFrame)Get Market Clearing Prices for Capacity by 15-minute interval
get_mcpc_sced(→ pandas.DataFrame)Get Market Clearing Prices for Capacity by SCED interval
get_mcpc_sced_price_corrections(→ pandas.DataFrame)Get Market Clearing Price for Capacity (MCPC) corrections for SCED.
Get Market Clearing Price for Capacity (MCPC) corrections for the
get_noie_mapping(→ pandas.DataFrame)get_operations_messages(→ pandas.DataFrame)Get operations messages from the ERCOT control room.
get_planned_outage_capacity_7_day(→ pandas.DataFrame)Hourly maximum resource capacity available for planned outages within 7
get_planned_outage_capacity_future(→ pandas.DataFrame)Daily maximum resource capacity available for planned outages from 7 days
get_raw_interconnection_queue(→ BinaryIO)get_real_time_adders(→ pandas.DataFrame)Get Real-Time ORDC and Reliability Deployment
get_real_time_adders_and_reserves(→ pandas.DataFrame)Get Real-Time ORDC and Reliability Deployment Price Adders and
get_real_time_system_conditions(→ pandas.DataFrame)Get Real-Time System Conditions.
get_reported_outages(→ pandas.DataFrame)Retrieves the 5-minute data behind this dashboard:
get_resource_node_to_unit(→ pandas.DataFrame)get_rtm_price_corrections(→ pandas.DataFrame)Get RTM Price Corrections
get_rtm_spp(→ pandas.DataFrame)Get Historical RTM Settlement Point Prices(SPPs)
get_sara(→ pandas.DataFrame)Parse SARA data from url.
get_sced_system_lambda(→ pandas.DataFrame)Get System lambda of each successful SCED
Get shadow price corrections for binding/violated constraints in SCED.
get_shadow_prices_dam(→ pandas.DataFrame)Get Day-Ahead Market Shadow Prices
get_short_term_system_adequacy(→ pandas.DataFrame)Get Short Term System Adequacy published between date and end.
Get Settlement Only Generator price corrections for the Real Time
get_solar_actual_and_forecast_by_geographical_region_hourly(date)Get Hourly Solar Report by geographical region
get_solar_actual_and_forecast_hourly(date[, end, verbose])Get Hourly Solar Report.
get_spp(→ pandas.DataFrame)Get SPP data for ERCOT
get_status(→ pandas.DataFrame)Returns status of grid
get_system_as_capacity_monitor(→ pandas.DataFrame)Get System Ancillary Service Capacity Monitor.
get_system_wide_actual_load(→ pandas.DataFrame)Get 15-minute system-wide actual load.
Get temperature forecast by weather zone in hourly intervals. Published
get_unplanned_resource_outages(→ pandas.DataFrame)Get Unplanned Resource Outages.
get_wind_actual_and_forecast_by_geographical_region_hourly(date)Get Hourly Wind Report by geographical region
get_wind_actual_and_forecast_hourly(date[, end, verbose])Get Hourly Wind Report.
parse_doc(→ pandas.DataFrame)read_doc(→ pandas.DataFrame)read_docs(→ pandas.DataFrame)- get_3_day_highest_price_bids_selected_sced(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get the bid price and name of the Load Resource submitting the highest-priced bid selected or dispatched by SCED for the given operating day.
Published daily, three days after the applicable operating day.
https://www.ercot.com/mp/data-products/data-product-details?id=np3-257-ex
- Parameters:
date – operating day to fetch data for.
end – optional end operating day for date range queries.
verbose – print verbose output.
- Returns:
Interval Start, Interval End, SCED Timestamp, QSE, DME, Load Resource, Highest Price Dispatched by SCED, Proxy Extension.
- Return type:
pandas.DataFrame with columns
- get_3_day_highest_price_offered_sced(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get the offer price and name of the Generation Resource submitting the highest-priced offer selected by SCED for the given operating day.
Published daily, three days after the applicable operating day.
https://www.ercot.com/mp/data-products/data-product-details?id=np3-916-ex
- Parameters:
date – operating day to fetch data for.
end – optional end operating day for date range queries.
verbose – print verbose output.
- Returns:
Interval Start, Interval End, SCED Timestamp, QSE, DME, Generation Resource, LMP, Proxy Extension, Power Balance Penalty Flag.
- Return type:
pandas.DataFrame with columns
- get_60_day_dam_disclosure(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, process: bool = False, verbose: bool = False, output_format: gridstatus.ercot_60d_utils.CurveOutputFormat | str = CurveOutputFormat.LIST) dict[source]#
Get 60 day DAM Disclosure data. Returns a dict with keys
“dam_gen_resource”
“dam_gen_resource_as_offers”
“dam_load_resource”
“dam_load_resource_as_offers”
“dam_energy_only_offer_awards”
“dam_energy_only_offers”
“dam_ptp_obligation_bid_awards”
“dam_ptp_obligation_bids”
“dam_energy_bid_awards”
“dam_energy_bids”
“dam_ptp_obligation_option”
“dam_ptp_obligation_option_awards”
“dam_esr” (when available, starting 2025-12-06)
“dam_esr_as_offers” (when available, starting 2025-12-06)
“dam_as_only_awards” (when available, starting 2025-12-06)
“dam_as_only_offers” (when available, starting 2025-12-06)
and values as pandas.DataFrame objects
The date passed in should be the report date. Since reports are delayed by 60 days, the passed date should not be fewer than 60 days in the past.
- Parameters:
output_format – CurveOutputFormat.LIST (default) returns Python list-of-lists per curve cell. CurveOutputFormat.PG_ARRAY_AS_STRING returns PG array strings, using ~3x less peak memory.
- get_60_day_sced_disclosure(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, process: bool = False, verbose: bool = False, output_format: gridstatus.ercot_60d_utils.CurveOutputFormat | str = CurveOutputFormat.LIST) dict[source]#
Get 60 day SCED Disclosure data
- Parameters:
date (datetime.date, str) – date to return
end (datetime.date, str, optional) – if declared, function will return data as a range, from “date” to “end”
process (bool, optional) – if True, will process the data into standardized format. if False, will return raw data
verbose (bool, optional) – print verbose output. Defaults to False.
output_format – CurveOutputFormat.LIST (default) returns Python list-of-lists per curve cell. CurveOutputFormat.PG_ARRAY_AS_STRING returns PG array strings, using ~3x less peak memory.
- Returns:
- dictionary with keys “sced_load_resource”, “sced_gen_resource”,
”sced_smne”, and (when available) “sced_esr”, “sced_eoc_updates”, “sced_resource_as_offers”, mapping to pandas.DataFrame objects
- Return type:
dict
- get_aggregate_gen_summary_2_day(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get 2-Day Aggregate Generation Summary by disclosure area.
Published with a 2 day delay around 3-4am central from NP3-910-ER.
- Parameters:
date – date to fetch reports for (delivery / content date)
end – end date for a range. Defaults to None.
verbose – print verbose output
- Returns:
Aggregate generation summary by Area
- Return type:
pandas.DataFrame
- get_aggregate_load_summary_2_day(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get 2-Day Aggregate Load Summary by disclosure area.
Published with a 2 day delay around 3-4am central from NP3-910-ER.
- Parameters:
date – date to fetch reports for (delivery / content date)
end – end date for a range. Defaults to None.
verbose – print verbose output
- Returns:
Aggregate load summary by Area
- Return type:
pandas.DataFrame
- get_aggregate_output_schedule_2_day(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get 2-Day Aggregate Output Schedules by disclosure area.
Published with a 2 day delay around 3-4am central from NP3-910-ER.
- Parameters:
date – date to fetch reports for (delivery / content date)
end – end date for a range. Defaults to None.
verbose – print verbose output
- Returns:
Aggregate output schedule by Area
- Return type:
pandas.DataFrame
- get_as_demand_curves_daily_ruc(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Daily RUC Ancillary Service Demand Curves
- get_as_demand_curves_dam_and_sced(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Ancillary Service Demand Curves
- get_as_demand_curves_hourly_ruc(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Hourly RUC Ancillary Service Demand Curves
- get_as_demand_curves_weekly_ruc(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Weekly RUC Ancillary Service Demand Curves
- get_as_deployment_factors_daily_ruc(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Daily RUC Ancillary Service Deployment Factors
- get_as_deployment_factors_hourly_ruc(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Hourly RUC Ancillary Service Deployment Factors
- get_as_deployment_factors_projected(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Projected Ancillary Service Deployment Factors
- get_as_deployment_factors_weekly_ruc(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Weekly RUC Ancillary Service Deployment Factors
Retrieves ancillary service deployment factors used by the Weekly Reliability Unit Commitment (WRUC) process for each hour in the RUC Study Period.
- Parameters:
date – Date to retrieve data for. Can be a string or pandas Timestamp.
end – Optional end date for date range queries.
verbose – If True, print verbose output.
- Returns:
Interval Start, Interval End, RUC Timestamp, AS Type, and AS Deployment Factors.
- Return type:
DataFrame with columns
- get_as_monitor(date: str = 'latest', verbose: bool = False) pandas.DataFrame[source]#
Get Ancillary Service Capacity Monitor.
Parses table from https://www.ercot.com/content/cdr/html/as_capacity_monitor.html
- Parameters:
date (str) – only supports “latest”
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with ancillary service capacity monitor data
- Return type:
pandas.DataFrame
- get_as_plan(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Ancillary Service requirements by type and quantity for each hour of the current day plus the next 6 days
- Parameters:
date (datetime.date, str) – date of delivery for AS services
end (datetime.date, str, optional) – if declared, function will return data as a range, from “date” to “end”
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with prices for ECRS, NSPIN, REGDN, REGUP, RRS
- Return type:
pandas.DataFrame
- get_as_prices(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get ancillary service clearing prices in hourly intervals in Day Ahead Market
- Parameters:
date (datetime.date, str) – date of delivery for AS services
end (datetime.date, str, optional) – if declared, function will return data as a range, from “date” to “end”
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with prices for “Non-Spinning Reserves”, “Regulation Up”, “Regulation Down”, “Responsive Reserves”, “ERCOT Contingency Reserve Service”
- Return type:
pandas.DataFrame
- get_as_reports(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], verbose: bool = False) pandas.DataFrame[source]#
Get Ancillary Services Reports.
Published with a 2 day delay around 3am central
- get_as_reports_dam(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], verbose: bool = False) pandas.DataFrame[source]#
Get Day-Ahead Market Ancillary Services Reports.
Published with a 2 day delay around 3am central.
Contains cleared, self-arranged, and bid curve data for each AS product.
- Parameters:
date – date to fetch reports for
verbose – print verbose output
- Returns:
A DataFrame with DAM ancillary services reports
- Return type:
pandas.DataFrame
- get_as_reports_sced(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], verbose: bool = False) pandas.DataFrame[source]#
Get 2-Day SCED Ancillary Service Disclosure Reports.
Published with a 2 day delay around 3am central.
Contains offer curves (MW offered and price) for each AS product at each SCED timestamp.
Output columns: SCED Timestamp, AS Type, Offer Curve
- Parameters:
date – date to fetch reports for
verbose – print verbose output
- Returns:
A DataFrame with SCED ancillary services offers
- Return type:
pandas.DataFrame
- get_as_total_capability(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Total Capability of Resources Available to Provide Ancillary Service
- get_available_seasonal_capacity_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = 'latest', verbose: bool = False) pandas.DataFrame[source]#
Retrieves the forecasted demand (Load Forecast) and the forecasted available seasonal capacity (Available Capacity) for the next 6 days.
Data is ephemeral and does not support past days.
- get_capacity_committed(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = 'latest', verbose: bool = False) pandas.DataFrame[source]#
Retrieves the actual committed capacity (the amount of power available from generating units that were on-line or providing operating reserves).
Data is ephemeral and does not support past days.
- get_capacity_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = 'latest', verbose: bool = False) pandas.DataFrame[source]#
Retrieves the forecasted committed capacity (Committed Capacity) and the forecasted available capacity (Available Capacity) for the current day.
Data is ephemeral and does not support past days.
- get_ccp_resource_names(date: str | pandas.Timestamp | None = None, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_cop_adjustment_period_snapshot_60_day(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_dam_asdc_aggregated(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get DAM Aggregated Ancillary Service Offer Curve (NP4-19-CD).
The DAM Aggregated Ancillary Service Demand/Offer Curve contains the aggregated offer curve (price/quantity pairs) per ancillary service type for each hour of the next day’s delivery, published once per DAM run.
dateandendare interpreted as delivery dates; the DAM runs the day before, so the underlying file is located by shifting the posted-date filter back by one day.https://www.ercot.com/mp/data-products/data-product-details?id=np4-19-cd
- get_dam_price_corrections(dam_type: str, published_after: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get DAM Price Corrections
- Parameters:
dam_type (str) – ‘DAM_SPP’, ‘DAM_EBLMP’
- get_dam_spp(year: int, verbose: bool = False) pandas.DataFrame[source]#
Get Historical DAM Settlement Point Prices(SPPs) for each of the Hubs and Load Zones
- Parameters:
year (int) – year to get data for. Starting 2011, returns data for the entire year
- get_dam_system_lambda(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Day-Ahead Market System Lambda
File is typically published around 12:30 pm for the day ahead
https://www.ercot.com/mp/data-products/data-product-details?id=NP4-523-CD
- Parameters:
date (str, datetime) – date to get data for
end (str, datetime, optional) – end time to get data for. If None, return 1 day of data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with day-ahead market system lambda data
- Return type:
pandas.DataFrame
- get_dam_total_as_sold(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get DAM Total Ancillary Services Sold
- get_dam_total_energy_purchased(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get DAM Total Energy Purchased
- Parameters:
date (str, datetime) – date to get data for
end (str, datetime) – end time to get data for
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with DAM total energy purchased data
- Return type:
pandas.DataFrame
- get_dam_total_energy_sold(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get DAM Total Energy Sold
- Parameters:
date (str, datetime) – date to get data for
end (str, datetime) – end time to get data for
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with DAM total energy sold data
- Return type:
pandas.DataFrame
- get_energy_storage_resources(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get energy storage resources. Always returns data from previous and current day
- get_fuel_mix(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], verbose: bool = False) pandas.DataFrame[source]#
Get fuel mix 5 minute intervals
- Parameters:
date (datetime.date, str) – “latest”, “today”, and yesterday’s date are supported.
verbose (bool) – print verbose output. Defaults to False.
- Returns:
A DataFrame with columns; Time and columns for each fuel type
- Return type:
pandas.DataFrame
- get_fuel_mix_detailed(date: str | datetime.datetime | pandas.Timestamp, verbose: bool = False) pandas.DataFrame[source]#
The fuel mix with gen, hsl, and seasonal capacity for each fuel type.
- get_highest_price_as_offer_selected(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get the offer price and the name of the Entity submitting the offer for the highest-priced Ancillary Service (AS) Offer.
Published with 3 day delay
- Parameters:
date (str, datetime) – date to get data for
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrameq
- Return type:
pandas.DataFrame
- get_highest_price_as_offer_selected_dam(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get the offer price and the name of the Entity submitting the offer for the highest-priced Ancillary Service (AS) Offer selected in the Day-Ahead Market (DAM).
Published with 3 day delay
- Parameters:
date (str, datetime) – date to get data for
end (str, datetime, optional) – end date for date range
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
- A DataFrame with columns:
Interval Start
Interval End
QSE
DME
Resource Name
AS Type
Block Indicator
Offered Price
Total Offered Quantity
Offered Quantities
- Return type:
pandas.DataFrame
- get_highest_price_as_offer_selected_sced(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get the offer price and the name of the Entity submitting the offer for the highest-priced Ancillary Service (AS) Offer selected in the Real-Time Market (SCED).
Published with 3 day delay
- Parameters:
date (str, datetime) – date to get data for
end (str, datetime, optional) – end date for date range
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
- A DataFrame with columns:
SCED Timestamp
QSE
DME
Resource Name
AS Type
Offered Price
Total Offered Quantity
Offered Quantities
- Return type:
pandas.DataFrame
- get_hourly_load_post_settlements(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get historical hourly load data from ERCOT’s load archives.
Downloads zip files from https://www.ercot.com/gridinfo/load/load_hist and parses the historical load data by weather zones.
- Parameters:
date (str, datetime) – Year to download data for
end (str, datetime) – End date for range, or None for single date
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
pandas.DataFrame
- get_hourly_resource_outage_capacity(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Hourly Resource Outage Capacity report sourced from the Outage Scheduler (OS).
Returns outage data for for next 7 days.
Total Resource MW doesn’t include IRR, New Equipment outages, retirement of old equipment, seasonal mothballed (during the outage season), and mothballed.
As such, it is a proxy for thermal outages.
- Parameters:
date (str, pd.Timestamp) – time to download. Returns last hourly report before this time.
end (str, pd.Timestamp, optional) – end time to download. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with hourly resource outage capacity data
- Return type:
pandas.DataFrame
- get_hub_name_dc_ties(date: str | pandas.Timestamp | None = None, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_indicative_lmp_by_settlement_point(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_indicative_mcpc_rtd(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get RTD Indicative Real-Time Market Clearing Prices for Capacity
- get_interconnection_queue(verbose: bool = False) pandas.DataFrame[source]#
Get interconnection queue for ERCOT
Includes large generation, small generation, inactive, and cancelled projects from the GIS Report.
- Monthly historical data available here:
- get_lmp(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, location_type: str = SETTLEMENT_POINT_LOCATION_TYPE, verbose: bool = False) pandas.DataFrame[source]#
Deprecated. Use the per-dataset methods instead:
get_lmp_by_settlement_point(),get_lmp_by_bus().
- get_lmp_by_bus(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time SCED LMPs by electrical bus (every five minutes).
- get_lmp_by_bus_dam(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Day-Ahead Market (DAM) LMPs by Electrical Bus
Returns hourly Locational Marginal Prices per electrical bus from the Day-Ahead Market.
https://www.ercot.com/mp/data-products/data-product-details?id=NP4-183-CD
- Parameters:
date (str, datetime) – date to get data for. Supports “today”, or a specific date.
end (str, datetime, optional) – end date for a date range query. If None, returns 1 day of data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with day-ahead LMPs by electrical bus
- Return type:
pandas.DataFrame
- get_lmp_by_bus_price_corrections(published_after: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get LMP corrections by electrical bus for each SCED run.
- Returns:
- DataFrame with columns:
Price Correction Time
SCED Timestamp
Interval Start
Interval End
Location
Location Type
LMP Original
LMP Corrected
- Return type:
pd.DataFrame
- get_lmp_by_settlement_point(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time SCED LMPs by settlement point (every five minutes).
- get_lmp_by_settlement_point_price_corrections(published_after: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get LMP corrections by settlement point for each SCED run.
- Returns:
- DataFrame with columns:
Price Correction Time
SCED Timestamp
Interval Start
Interval End
Location
Location Type
LMP Original
LMP Corrected
- Return type:
pd.DataFrame
- get_load(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get load for a date
- Parameters:
date (datetime.date, str) – “today”, or a date string are supported.
- get_load_by_forecast_zone(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], verbose: bool = False) pandas.DataFrame[source]#
Get hourly load for ERCOT forecast zones
- Parameters:
date (datetime.date, str) – “today”, or a date string are supported.
verbose (bool) – print verbose output. Defaults to False.
- Returns:
pandas.DataFrame
- get_load_by_weather_zone(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], verbose: bool = False) pandas.DataFrame[source]#
Get hourly load for ERCOT weather zones
- Parameters:
date (datetime.date, str) – “today”, or a date string are supported.
verbose (bool) – print verbose output. Defaults to False.
- Returns:
pandas.DataFrame
- get_load_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, forecast_type: ERCOTSevenDayLoadForecastReport = ERCOTSevenDayLoadForecastReport.BY_FORECAST_ZONE, verbose: bool = False) pandas.DataFrame[source]#
Returns load forecast of specified forecast type.
If date range provided, returns all hourly reports published within.
Note: only limited historical data is available
- Parameters:
date (str, datetime) – datetime to download. If end not provided, returns last hourly report published before. if “latest”, returns most recent hourly report. if end provided, returns all hourly reports published after this date and before end.
end (str, datetime,) – if provided, returns all hourly reports published after date and before end
forecast_type (ERCOTSevenDayLoadForecastReport) – The load forecast type. Enum of possible values.
verbose (bool, optional) – print verbose output. Defaults to False.
- get_load_forecast_by_model(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Seven-Day Load Forecast by Model and Weather Zone.
Forecasted hourly demand by Model and Weather Zone as reported by ERCOT. Released every hour for the current day and the next 7.
- Parameters:
date (str, datetime) – date to get report for. Supports a date string.
end (str, datetime, optional) – end date for date range. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with load forecast by model data
- Return type:
pandas.DataFrame
- get_mcpc_dam(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Market Clearing Prices for Capacity (MCPC) from the Day-Ahead Market
Returns hourly MCPC per ancillary service type in long format.
https://www.ercot.com/mp/data-products/data-product-details?id=NP4-188-CD
- Parameters:
date (str, datetime) – date to get data for. Supports “today”, or a specific date.
end (str, datetime, optional) – end date for a date range query. If None, returns 1 day of data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
- A DataFrame with columns: Interval Start,
Interval End, AS Type, MCPC
- Return type:
pandas.DataFrame
- get_mcpc_dam_price_corrections(published_after: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Market Clearing Price for Capacity (MCPC) corrections for DAM.
MCPC (Market Clearing Price for Capacity) corrections contain ancillary service prices at the system level.
- Returns:
- DataFrame with columns:
Price Correction Time
Interval Start
Interval End
AS Type
MCPC Original
MCPC Corrected
- Return type:
pd.DataFrame
- get_mcpc_real_time_15_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Market Clearing Prices for Capacity by 15-minute interval
- get_mcpc_sced(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Market Clearing Prices for Capacity by SCED interval
- get_mcpc_sced_price_corrections(published_after: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Market Clearing Price for Capacity (MCPC) corrections for SCED.
MCPC (Market Clearing Price for Capacity) corrections contain ancillary service prices at the system level for each SCED run.
- Returns:
- DataFrame with columns:
Price Correction Time
SCED Timestamp
Interval Start
Interval End
AS Type
MCPC Original
MCPC Corrected
- Return type:
pd.DataFrame
- get_mcpc_spp_real_time_price_corrections(published_after: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Market Clearing Price for Capacity (MCPC) corrections for the Real Time Market at 15-minute settlement intervals.
MCPC (Market Clearing Price for Capacity) corrections contain ancillary service prices at the system level.
- Returns:
- DataFrame with columns:
Price Correction Time
Interval Start
Interval End
AS Type
MCPC Original
MCPC Corrected
- Return type:
pd.DataFrame
- get_noie_mapping(date: str | pandas.Timestamp | None = None, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_operations_messages(date: str | pandas.Timestamp | None = None, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get operations messages from the ERCOT control room.
When called without date arguments, scrapes the live page at https://www.ercot.com/services/comm/mkt_notices/opsmessages which shows a rolling window of recent messages (~one month).
When called with a date (and optional end), fetches historical snapshots from the Wayback Machine covering the requested range, deduplicates, and filters to the requested window.
- Parameters:
date – Start date for historical query, or None for latest.
end – End date for historical query. Defaults to date + 1 month.
verbose – Print verbose output.
- Returns:
pandas.DataFrame with columns Time, Notice, Type, Status.
- get_planned_outage_capacity_7_day(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Hourly maximum resource capacity available for planned outages within 7 days of the operating day, as reported by ERCOT (NP3-162-CD).
The date argument refers to the publish time of the report, which is published hourly.
- Parameters:
date (str, pd.Timestamp) – publish time to download.
end (str, pd.Timestamp, optional) – end publish time to download. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with hourly planned outage capacity data
- Return type:
pandas.DataFrame
- get_planned_outage_capacity_future(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Daily maximum resource capacity available for planned outages from 7 days to 60 months ahead of the operating day, as reported by ERCOT (NP3-161-CD).
The date argument refers to the publish time of the report, which is published twice each business day.
- Parameters:
date (str, pd.Timestamp) – publish time to download.
end (str, pd.Timestamp, optional) – end publish time to download. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with daily planned outage capacity data
- Return type:
pandas.DataFrame
- get_real_time_adders(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Real-Time ORDC and Reliability Deployment Price Adders and Reserves by SCED Interval produced by SCED every five minutes.
- Parameters:
date – date to get data for
end – end date to get data for. If None, defaults to date + 1 day
verbose – print verbose output. Defaults to False.
- Returns:
A DataFrame with ORDC price adders data
- Return type:
pandas.DataFrame
- get_real_time_adders_and_reserves(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- Get Real-Time ORDC and Reliability Deployment Price Adders and
Reserves by SCED Interval
At: https://www.ercot.com/mp/data-products/data-product-details?id=NP6-323-CD
- Parameters:
date (str, datetime) – date to get data for
end (str, datetime) – end date to get data for
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with ORDC data
- Return type:
pandas.DataFrame
NOTE: data only goes back 5 days
- get_real_time_system_conditions(date: str = 'latest', verbose: bool = False) pandas.DataFrame[source]#
Get Real-Time System Conditions.
Parses table from https://www.ercot.com/content/cdr/html/real_time_system_conditions.html
- Parameters:
date (str) – only supports “latest”
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with real-time system conditions
- Return type:
pandas.DataFrame
- get_reported_outages(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the 5-minute data behind this dashboard: https://www.ercot.com/gridmktinfo/dashboards/generationoutages
Data available at https://www.ercot.com/api/1/services/read/dashboards/generation-outages.json
This data is ephemeral in that there is only one file available that is constantly updated. There is no historical data.
- get_resource_node_to_unit(date: str | pandas.Timestamp | None = None, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_rtm_price_corrections(rtm_type: str, published_after: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get RTM Price Corrections
- Parameters:
rtm_type (str) – ‘RTM_SPP’, ‘RTM_SPLMP’, ‘RTM_EBLMP’, ‘RTM_ShadowPrice’, ‘RTM_SOGLMP’, ‘RTM_SOGPRICE’
- get_rtm_spp(year: int, verbose: bool = False) pandas.DataFrame[source]#
- Get Historical RTM Settlement Point Prices(SPPs)
for each of the Hubs and Load Zones
- Parameters:
year (int) – year to get data for Starting 2011, returns data for the entire year
- get_sara(url: str = 'https://www.ercot.com/files/docs/2023/05/05/SARA_Summer2023_Revised.xlsx', verbose: bool = False) pandas.DataFrame[source]#
Parse SARA data from url.
Seasonal Assessment of Resource Adequacy for the ERCOT Region (SARA)
- Parameters:
url (str, optional) – url to download SARA data from. Defaults to Summer 2023 SARA data.
- get_sced_system_lambda(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get System lambda of each successful SCED
Normally published every 5 minutes
- Parameters:
date (str, datetime, pd.Timestamp) – date or start time to get data for
end (str, datetime, optional) – end time to get data for. If None, return 1 day of data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame
- Return type:
pandas.DataFrame
- get_settlement_points_electrical_bus_mapping(date: str | pandas.Timestamp | None = None, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_shadow_price_real_time_price_corrections(published_after: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get shadow price corrections for binding/violated constraints in SCED.
- Returns:
- DataFrame with columns:
Price Correction Time
SCED Timestamp
Interval Start
Interval End
Constraint ID
Constraint Name
Contingency Name
Shadow Price Original
Shadow Price Corrected
Limit Original
Limit Corrected
Value Original
Value Corrected
- Return type:
pd.DataFrame
- get_shadow_prices_dam(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Day-Ahead Market Shadow Prices
Returns shadow prices for binding transmission constraints from the Day-Ahead Market.
https://www.ercot.com/mp/data-products/data-product-details?id=NP4-191-CD
- Parameters:
date (str, datetime) – date to get data for. Supports “today”, or a specific date.
end (str, datetime, optional) – end date for a date range query. If None, returns 1 day of data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with day-ahead market shadow prices
- Return type:
pandas.DataFrame
- get_short_term_system_adequacy(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Short Term System Adequacy published between date and end.
- Parameters:
date (str, datetime) – date to get data for
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with system adequacy data
- Return type:
pandas.DataFrame
- get_sog_price_real_time_price_corrections(published_after: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Settlement Only Generator price corrections for the Real Time Market at 15-minute settlement intervals.
- Returns:
- DataFrame with columns:
Price Correction Time
Interval Start
Interval End
Resource Type
Resource Name
Meter Name
Price Original
Price Corrected
- Return type:
pd.DataFrame
- get_solar_actual_and_forecast_by_geographical_region_hourly(date: str | datetime.date, end: str | datetime.date = None, verbose: bool = False)[source]#
Get Hourly Solar Report by geographical region
Posted every hour and includes System-wide and geographic regional hourly averaged solar power production, STPPF, PVGRPP, and COP HSL for On-Line PVGRs for a rolling historical 48-hour period as well as the system-wide and regional STPPF, PVGRPP, and COP HSL for On-Line PVGRs for the rolling future 168-hour period.
- Parameters:
date (str) – date to get report for. Supports a date string
end (str, optional) – end date for date range. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with hourly solar report data
- Return type:
pandas.DataFrame
- get_solar_actual_and_forecast_hourly(date: str | datetime.date, end: str | datetime.date = None, verbose: bool = False)[source]#
Get Hourly Solar Report.
- Parameters:
date (str) – date to get report for. Supports a date string
end (str, optional) – end date for date range. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with hourly solar report data
- Return type:
pandas.DataFrame
- get_spp(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, market: str = None, locations: list = 'ALL', location_type: str = 'ALL', verbose: bool = False) pandas.DataFrame[source]#
Get SPP data for ERCOT
- Supported Markets:
REAL_TIME_15_MINDAY_AHEAD_HOURLY
- Supported Location Types:
Load ZoneTrading HubResource Node
- get_status(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], verbose: bool = False) pandas.DataFrame[source]#
Returns status of grid
- get_system_as_capacity_monitor(date: str | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get System Ancillary Service Capacity Monitor.
Fetches real-time ancillary service capacity data from https://www.ercot.com/api/1/services/read/dashboards/ancillary-service-capacity-monitor.json
- Parameters:
date (str) – only supports “latest”
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with system AS capacity monitor data
- Return type:
pandas.DataFrame
- get_system_wide_actual_load(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get 15-minute system-wide actual load.
This report is posted every hour five minutes after the hour.
- Parameters:
date (str, datetime) – date to get data for
end (str, datetime, optional) – end time to get data for. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with system actuals data
- Return type:
pandas.DataFrame
- get_temperature_forecast_by_weather_zone(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get temperature forecast by weather zone in hourly intervals. Published once a day at 5 am central.
- Parameters:
date (str, datetime) – date to get data for
end (str, datetime, optional) – end time to get data for. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with temperature forecast data
- Return type:
pandas.DataFrame
- get_unplanned_resource_outages(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Unplanned Resource Outages.
Data published at ~5am central on the 3rd day after the day of interest. Since the date argument is the publish date, if you want to get data for a specific date, pass in the date of interest - 3 days.
- Parameters:
date (str, datetime) – publish date of the report
end (str, datetime, optional) – end date to download. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with unplanned resource outages
- Return type:
pandas.DataFrame
- get_wind_actual_and_forecast_by_geographical_region_hourly(date: str | datetime.date, end: str | datetime.date = None, verbose: bool = False)[source]#
Get Hourly Wind Report by geographical region
- Parameters:
date (str) – date to get report for.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with hourly wind report data
- Return type:
pandas.DataFrame
- get_wind_actual_and_forecast_hourly(date: str | datetime.date, end: str | datetime.date = None, verbose: bool = False)[source]#
Get Hourly Wind Report.
This report is posted every hour and includes System-wide and Regional actual hourly averaged wind power production, STWPF, WGRPP and COP HSLs for On-Line WGRs for a rolling historical 48-hour period as well as the System-wide and Regional STWPF, WGRPP and COP HSLs for On-Line WGRs for the rolling future 168-hour period. Our forecasts attempt to predict HSL, which is uncurtailed power generation potential.
- Parameters:
date (str) – date to get report for.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with hourly wind report data
- Return type:
pandas.DataFrame
- parse_doc(doc: pandas.DataFrame, dst_ambiguous_default: str = 'infer', verbose: bool = False, nonexistent: str = 'raise') pandas.DataFrame[source]#
- gridstatus.get_iso(iso_id: str) gridstatus.base.ISOBase[source]#
Get an ISO by its id
- class gridstatus.IESO[source]#
Bases:
gridstatus.base.ISOBaseIndependent Electricity System Operator (IESO)
Attributes
default_timezone
‘EST’
iso_id
‘ieso’
name
‘Independent Electricity System Operator’
status_homepage
Methods
Get forecast surplus baseload generation.
get_fuel_mix(date[, end, verbose])Hourly output and capability for each fuel type (summed over all generators)
get_generator_report_hourly(date[, end, verbose])Hourly output for each generator for a given date or from date to end.
get_hoep_historical_hourly(date[, end, verbose])get_hoep_real_time_hourly(→ pandas.DataFrame)get_in_service_transmission_limits(date[, end, verbose])get_intertie_flow_5_min(→ pandas.DataFrame)get_intertie_limits_day_ahead_hourly(→ pandas.DataFrame)Get day-ahead intertie scheduling limits.
get_intertie_limits_real_time_5_min(→ pandas.DataFrame)Get real-time intertie scheduling limits.
get_lmp_day_ahead_hourly(→ pandas.DataFrame)Get day-ahead LMP data.
get_lmp_day_ahead_hourly_intertie(→ pandas.DataFrame)get_lmp_day_ahead_hourly_ontario_zonal(date[, end, ...])get_lmp_day_ahead_hourly_virtual_zonal(→ pandas.DataFrame)Get day-ahead zonal virtual LMP data.
get_lmp_day_ahead_operating_reserves(→ pandas.DataFrame)Get day-ahead operating reserves LMP data.
get_lmp_predispatch_hourly(→ pandas.DataFrame)get_lmp_predispatch_hourly_intertie(→ pandas.DataFrame)get_lmp_predispatch_hourly_ontario_zonal(date[, end, ...])get_lmp_predispatch_hourly_virtual_zonal(date[, end, ...])get_lmp_real_time_5_min(date[, end, verbose])get_lmp_real_time_5_min_intertie(date[, end, verbose])get_lmp_real_time_5_min_ontario_zonal(date[, end, verbose])get_lmp_real_time_5_min_virtual_zonal(date[, end, verbose])get_lmp_real_time_operating_reserves(date[, end, verbose])get_load(date[, end, verbose])Get 5-minute load for the Market and Ontario for a given date or from
get_load_forecast(date[, verbose])Get forecasted load for Ontario. Supports only "latest" and "today" because
get_load_zonal_5_min(→ pandas.DataFrame)get_load_zonal_hourly(→ pandas.DataFrame)get_mcp_historical_5_min(date[, end, verbose])get_outage_transmission_limits(date[, end, verbose])get_real_time_totals(→ pandas.DataFrame)get_resource_adequacy_report(→ pandas.DataFrame)Retrieve and parse the Resource Adequacy Report for a given date.
Retrieve and parse Resource Adequacy Reports modified after last_modified time.
get_shadow_prices_day_ahead_hourly(→ pandas.DataFrame)get_shadow_prices_real_time_5_min(→ pandas.DataFrame)get_solar_embedded_forecast(→ pandas.DataFrame)get_solar_market_participant_forecast(→ pandas.DataFrame)get_transmission_outages_planned(date[, end, verbose])get_wind_embedded_forecast(→ pandas.DataFrame)get_wind_market_participant_forecast(→ pandas.DataFrame)Get yearly intertie actual schedule flow hourly. Since this is a yearly file
get_zonal_load_forecast(date[, end, verbose])Get forecasted load by forecast zone (Ontario, East, West) for a given date
- get_forecast_surplus_baseload_generation(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get forecast surplus baseload generation.
- Parameters:
date – The publish date to get data for. The forecast will be for the day after this date.
end – The end date to get data for. If None, only get data for the start date.
verbose – Whether to print verbose output.
- Returns:
Interval Start: The start of the interval
Interval End: The end of the interval
Publish Time: The time the forecast was published
Surplus Baseload MW: The forecast surplus baseload generation in MW
Surplus State: The state of the surplus baseload generation
Action: The action taken for the surplus baseload generation
Export Forecast MW: The forecast export in MW
Minimum Generation Status: The minimum generation status
- Return type:
DataFrame with columns
- get_fuel_mix(date: str | datetime.date | datetime.datetime, end: datetime.date | datetime.datetime | None = None, verbose: bool = False)[source]#
Hourly output and capability for each fuel type (summed over all generators) for a given date or from date to end. Variable generators (solar and wind) have a forecast.
- Parameters:
date (datetime.date | datetime.datetime | str) – The date to get the load for Can be a datetime.date or datetime.datetime object, or a string with the values “today” or “latest”. If end is None, returns only data for this date.
end (datetime.date | datetime.datetime, optional) – End date. Defaults None If provided, returns data from date to end date. The end can be a datetime.date or datetime.datetime object.
verbose (bool, optional) – Print verbose output. Defaults to False.
- Returns:
fuel mix
- Return type:
pd.DataFrame
- get_generator_report_hourly(date: str | datetime.date | datetime.datetime, end: datetime.date | datetime.datetime | None = None, verbose: bool = False)[source]#
Hourly output for each generator for a given date or from date to end. Variable generators (solar and wind) have a forecast and available capacity. Non-variable generators have a capability.
- Parameters:
date (datetime.date | datetime.datetime | str) – The date to get the load for Can be a datetime.date or datetime.datetime object, or a string with the values “today” or “latest”. If end is None, returns only data for this date.
end (datetime.date | datetime.datetime, optional) – End date. Defaults None If provided, returns data from date to end date. The end can be a datetime.date or datetime.datetime object.
verbose (bool, optional) – Print verbose output. Defaults to False.
- Returns:
generator output and capability/available capacity
- Return type:
pd.DataFrame
- get_hoep_historical_hourly(date: str | datetime.date | datetime.datetime, end: datetime.date | datetime.datetime | None = None, verbose: bool = False)[source]#
- get_hoep_real_time_hourly(date: str | datetime.date | datetime.datetime, end: datetime.date | datetime.datetime | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_in_service_transmission_limits(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False)[source]#
- get_intertie_actual_schedule_flow_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_intertie_flow_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_intertie_limits_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get day-ahead intertie scheduling limits.
This returns hourly data showing import and export limits for each of Ontario’s intertie zones used in the day-ahead market.
- Parameters:
date – Date or date range to get data for, or “latest”
end – End date for date range (optional)
verbose – Whether to print verbose output
- Returns:
DataFrame with columns for interval start/end and import/export limits for each intertie zone
- get_intertie_limits_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time intertie scheduling limits.
This returns 5-minute interval data showing import and export limits for each of Ontario’s intertie zones.
- Parameters:
date – Date or date range to get data for, or “latest”
end – End date for date range (optional)
verbose – Whether to print verbose output
- Returns:
DataFrame with columns for interval start/end and import/export limits for each intertie zone
- get_lmp_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get day-ahead LMP data. :param date: The date to get the data for. :param end: The end date to get the data for. :param verbose: Whether to print verbose output.
- Returns:
DataFrame with LMP data.
- get_lmp_day_ahead_hourly_intertie(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_lmp_day_ahead_hourly_ontario_zonal(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False)[source]#
- get_lmp_day_ahead_hourly_virtual_zonal(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get day-ahead zonal virtual LMP data. :param date: The date to get the data for. :param end: The end date to get the data for. :param verbose: Whether to print verbose output.
- Returns:
DataFrame with LMP data.
- get_lmp_day_ahead_operating_reserves(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get day-ahead operating reserves LMP data.
- Parameters:
date – The date to get the data for.
end – The end date to get the data for.
verbose – Whether to print verbose output.
- Returns:
DataFrame with operating reserves LMP data.
- get_lmp_predispatch_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_lmp_predispatch_hourly_intertie(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_lmp_predispatch_hourly_ontario_zonal(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False)[source]#
- get_lmp_predispatch_hourly_virtual_zonal(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False)[source]#
- get_lmp_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False)[source]#
- get_lmp_real_time_5_min_intertie(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False)[source]#
- get_lmp_real_time_5_min_ontario_zonal(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False)[source]#
- get_lmp_real_time_5_min_virtual_zonal(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False)[source]#
- get_lmp_real_time_operating_reserves(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False)[source]#
- get_load(date: str | datetime.date | datetime.datetime, end: datetime.date | datetime.datetime | None = None, verbose: bool = False)[source]#
Get 5-minute load for the Market and Ontario for a given date or from date to end date.
- Parameters:
date (datetime.date | datetime.datetime | str) – The date to get the load for Can be a datetime.date or datetime.datetime object, or a string with the values “today” or “latest”. If end is None, returns only data for this date.
end (datetime.date | datetime.datetime, optional) – End date. Defaults None If provided, returns data from date to end date. The end can be a datetime.date or datetime.datetime object.
verbose (bool, optional) – Print verbose output. Defaults to False.
frequency (str, optional) – Frequency of data. Defaults to “5min”.
- Returns:
zonal load as a wide table with columns for each zone
- Return type:
pd.DataFrame
- get_load_forecast(date: str, verbose: bool = False)[source]#
Get forecasted load for Ontario. Supports only “latest” and “today” because there is only one load forecast.
- Parameters:
date (str) – Either “today” or “latest”
verbose (bool, optional) – Print verbose output. Defaults to False.
- Returns:
Ontario load forecast
- Return type:
pd.DataFrame
- get_load_zonal_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_load_zonal_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_mcp_historical_5_min(date: str | datetime.date | datetime.datetime, end: datetime.date | datetime.datetime | None = None, verbose: bool = False)[source]#
- get_outage_transmission_limits(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False)[source]#
- get_real_time_totals(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_resource_adequacy_report(date: str | datetime.date | datetime.datetime, end: datetime.date | datetime.datetime | None = None, vintage: Literal['all', 'latest'] = 'latest', last_modified: str | datetime.date | datetime.datetime | None = None) pandas.DataFrame[source]#
Retrieve and parse the Resource Adequacy Report for a given date.
- Parameters:
date (str | datetime.date | datetime.datetime) – The date for which to get the report
end (datetime.date | datetime.datetime | None) – The end date for the range of reports to get
vintage (Literal["all", "latest"]) – The version of the report to get
last_modified (str | datetime.date | datetime.datetime | None) – The last modified time after which to get report(s)
- Returns:
The Resource Adequacy Report df for the given date
- Return type:
pd.DataFrame
- get_resource_adequacy_report_by_last_modified(last_modified: str | datetime.date | datetime.datetime) pandas.DataFrame[source]#
Retrieve and parse Resource Adequacy Reports modified after last_modified time. This method bypasses date iteration and gets all files across all dates. This is useful for ETL systems that want to get all new files at once.
- Parameters:
last_modified – The last modified time after which to get report(s)
vintage – The version of the report to get
- Returns:
The Resource Adequacy Report df with all files modified after last_modified
- Return type:
pd.DataFrame
- get_shadow_prices_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False, last_modified: str | pandas.Timestamp | None = None) pandas.DataFrame[source]#
- get_shadow_prices_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False, last_modified: str | pandas.Timestamp | None = None) pandas.DataFrame[source]#
- get_solar_embedded_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, vintage: Literal['latest', 'all'] = 'latest', verbose: bool = False) pandas.DataFrame[source]#
- get_solar_market_participant_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, vintage: Literal['latest', 'all'] = 'latest', verbose: bool = False) pandas.DataFrame[source]#
- get_transmission_outages_planned(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False)[source]#
- get_wind_embedded_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, vintage: Literal['latest', 'all'] = 'latest', verbose: bool = False) pandas.DataFrame[source]#
- get_wind_market_participant_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, vintage: Literal['latest', 'all'] = 'latest', verbose: bool = False) pandas.DataFrame[source]#
- get_yearly_intertie_actual_schedule_flow_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False, vintage: Literal['all', 'latest'] = 'latest', last_modified: str | datetime.date | datetime.datetime | None = None) pandas.DataFrame[source]#
Get yearly intertie actual schedule flow hourly. Since this is a yearly file it is updated less frequency than the daily files. These can be retrieved via the get_intertie_schedule_flow_hourly method. :param date: The date to get the data for. :param end: The end date to get the data for. :param verbose: Whether to print verbose output. :param vintage: Whether to get the latest version or all versions of the report. :param last_modified: Only return reports modified after this date.
- Returns:
DataFrame with hourly intertie schedule flow data.
- get_zonal_load_forecast(date: str | datetime.date | tuple[datetime.date, datetime.date], end: datetime.date | datetime.datetime | None = None, verbose: bool = False)[source]#
Get forecasted load by forecast zone (Ontario, East, West) for a given date or from date to end date. This method supports future dates.
Supports data 90 days into the past and up to 34 days into the future.
- Parameters:
date (datetime.date | datetime.datetime | str) – The date to get the load for Can be a datetime.date or datetime.datetime object, or a string with the values “today” or “latest”. If end is None, returns only data for this date.
end (datetime.date | datetime.datetime, optional) – End date. Defaults None If provided, returns data from date to end date. The end can be a datetime.date or datetime.datetime object.
verbose (bool, optional) – Print verbose output. Defaults to False.
- Returns:
forecasted load as a wide table with columns for each zone
- Return type:
pd.DataFrame
- class gridstatus.ISONE[source]#
Bases:
gridstatus.base.ISOBaseISO New England (ISONE)
Attributes
default_timezone
‘US/Eastern’
hubs
None
interconnection_homepage
interfaces
None
iso_id
‘isone’
lmp_real_time_intervals
[‘00-04’, ‘04-08’, ‘08-12’, ‘12-16’, ‘16-20’, ‘20-24’]
markets
None
name
‘ISO New England’
status_homepage
‘https://www.iso-ne.com/markets-operations/system-forecast-status/current-system-status’
zones
None
Methods
get_btm_solar(date[, end, verbose])Return BTM solar at a previous date in 5 minute intervals
get_fuel_mix(date[, end, verbose])Return fuel mix at a previous date
get_interconnection_queue([verbose])Get the interconnection queue. Contains active and withdrawm applications.
get_lmp(date[, end, market, locations, include_id, ...])Deprecated. Use the per-dataset methods instead:
get_lmp_day_ahead_hourly(→ pandas.DataFrame)Get day-ahead hourly LMPs for all locations.
get_lmp_real_time_5_min(→ pandas.DataFrame)Get real-time 5-minute LMPs for all locations.
get_lmp_real_time_hourly(→ pandas.DataFrame)Get real-time hourly LMPs for all locations.
get_load(date[, end, verbose])Return load at a previous date in 5 minute intervals
get_load_forecast(date[, end, verbose])Return forecast at a previous date
get_raw_interconnection_queue(→ BinaryIO)Extract raw ISONE interconnection queue data.
get_reserve_zone_prices_designations_real_time_5_min_final(date)Return final five-minute reserve zone requirements, prices, and designations
get_solar_forecast(date[, end, verbose])Return solar forecast published on a specific date
get_status(date[, verbose])Get latest status for ISO NE
get_wind_forecast(date[, end, verbose])Return wind forecast published on a specific date
- get_btm_solar(date, end=None, verbose=False)[source]#
Return BTM solar at a previous date in 5 minute intervals
- get_fuel_mix(date, end=None, verbose=False)[source]#
Return fuel mix at a previous date
Provided at frequent, but irregular intervals by ISONE
- get_interconnection_queue(verbose=False)[source]#
Get the interconnection queue. Contains active and withdrawm applications.
More information: https://www.iso-ne.com/system-planning/interconnection-service/interconnection-request-queue/
- Returns:
interconnection queue
- Return type:
pandas.DataFrame
- get_lmp(date, end=None, market: str = None, locations: list = None, include_id=False, verbose=False)[source]#
Deprecated. Use the per-dataset methods instead:
get_lmp_real_time_5_min(),get_lmp_real_time_hourly(),get_lmp_day_ahead_hourly().
- get_lmp_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get day-ahead hourly LMPs for all locations.
- get_lmp_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time 5-minute LMPs for all locations.
- get_lmp_real_time_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time hourly LMPs for all locations.
- get_load(date, end=None, verbose=False)[source]#
Return load at a previous date in 5 minute intervals
- get_raw_interconnection_queue(verbose=False) BinaryIO[source]#
Extract raw ISONE interconnection queue data.
ISONE interconnection queue data is available on a webpage as an HTML table or you can download it as an excel file. Obviously an excel file would be much easier to work with however, the helpful generalized “Status” column (Withdrawn, Active, Commercial) and the “Jurisdiction” column are only available as HTML.
Also, there is helpful detailed status information in the FS, SIS, OS, FAC, IA columns that are represented as <img> tags in the HTML.
This function replaces the <img> tags that convey detailed status information as text and extracts the html as a dataframe. You can see the image to text mapping in the upper left hand corner of the ISONE Queue data page: https://irtt.iso-ne.com/reports/external.
- get_reserve_zone_prices_designations_real_time_5_min_final(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | None = None, verbose: bool = False)[source]#
Return final five-minute reserve zone requirements, prices, and designations
Published and sometimes updated in the days following the operating day.
- Parameters:
date – Date to query. Supports “latest” and “today”
end – End date for date range queries
verbose – Enable verbose logging
- Returns:
Interval Start, Interval End, Reserve Zone ID, Reserve Zone Name, Ten Min Spin Requirement, Ten Min Requirement, Total Requirement, TMSR Designated MW, TMNSR Designated MW, TMOR Designated MW, TMSR Clearing Price, TMR Clearing Price, Total Reserve Clearing Price
- Return type:
DataFrame with columns
- get_solar_forecast(date, end=None, verbose=False)[source]#
Return solar forecast published on a specific date
Forecast is published for 7 days and generated daily by 10 am. https://www.iso-ne.com/isoexpress/web/reports/operations/-/tree/seven-day-solar-power-forecast
- get_wind_forecast(date, end=None, verbose=False)[source]#
Return wind forecast published on a specific date
Forecast is published for 7 days and generated daily by 10 am. https://www.iso-ne.com/isoexpress/web/reports/operations/-/tree/seven-day-wind-power-forecast
- gridstatus.load_folder(path: str, time_zone: str | None = None, verbose: bool = True) pandas.DataFrame[source]#
Load a single DataFrame for same schema csv files in a folder
- Parameters:
path (str) – path to folder
time_zone (str) – time zone to localize to timestamps. By default returns as UTC
verbose (bool, optional) – print verbose output. Defaults to True.
- Returns:
A DataFrame of all files
- Return type:
pandas.DataFrame
- class gridstatus.Markets[source]#
Bases:
enum.StrEnumNames of LMP Markets
Initialize self. See help(type(self)) for accurate signature.
Attributes
DAY_AHEAD_HOURLY
‘DAY_AHEAD_HOURLY’
DAY_AHEAD_HOURLY_EX_ANTE
‘DAY_AHEAD_HOURLY_EX_ANTE’
DAY_AHEAD_HOURLY_EX_POST
‘DAY_AHEAD_HOURLY_EX_POST’
REAL_TIME_15_MIN
‘REAL_TIME_15_MIN’
REAL_TIME_5_MIN
‘REAL_TIME_5_MIN’
REAL_TIME_5_MIN_EX_ANTE
‘REAL_TIME_5_MIN_EX_ANTE’
REAL_TIME_5_MIN_EX_POST_FINAL
‘REAL_TIME_5_MIN_EX_POST_FINAL’
REAL_TIME_5_MIN_EX_POST_PRELIM
‘REAL_TIME_5_MIN_EX_POST_PRELIM’
REAL_TIME_5_MIN_FINAL
‘REAL_TIME_5_MIN_FINAL’
REAL_TIME_HOURLY
‘REAL_TIME_HOURLY’
REAL_TIME_HOURLY_EX_POST_FINAL
‘REAL_TIME_HOURLY_EX_POST_FINAL’
REAL_TIME_HOURLY_EX_POST_PRELIM
‘REAL_TIME_HOURLY_EX_POST_PRELIM’
REAL_TIME_HOURLY_FINAL
‘REAL_TIME_HOURLY_FINAL’
REAL_TIME_HOURLY_PRELIM
‘REAL_TIME_HOURLY_PRELIM’
REAL_TIME_SCED
‘REAL_TIME_SCED’
Methods
__contains__(item)Return bool(key in self).
- class gridstatus.MISO[source]#
Bases:
gridstatus.base.ISOBaseMidcontinent Independent System Operator (MISO)
Attributes
default_timezone
‘EST’
hubs
[‘ILLINOIS.HUB’, ‘INDIANA.HUB’, ‘LOUISIANA.HUB’, ‘MICHIGAN.HUB’, ‘MINN.HUB’, ‘MS.HUB’, ‘TEXAS.HUB’, ‘ARKANSAS.HUB’]
interconnection_homepage
‘https://www.misoenergy.org/planning/generator-interconnection/GI_Queue/’
iso_id
‘miso’
markets
None
name
‘Midcontinent ISO’
solar_and_wind_forecast_cols
[‘Interval Start’, ‘Interval End’, ‘Publish Time’, ‘North’, ‘Central’, ‘South’, ‘MISO’]
solar_and_wind_forecast_region_cols
[‘North’, ‘Central’, ‘South’, ‘MISO’]
Methods
get_area_control_error(→ pandas.DataFrame)Get the MISO Area Control Error (ACE).
Get the day-ahead binding constraints data from MISO for a given year.
get_binding_constraints_real_time_5_min(→ pandas.DataFrame)Get real-time binding constraints data from MISO's intraday API.
Get the real-time binding constraints data from MISO for a given year.
get_binding_constraints_supplemental(→ pandas.DataFrame)Get the supplemental binding constraints data from MISO.
get_fuel_mix(→ pandas.DataFrame)Get the fuel mix for a given day for a provided MISO.
get_generation_outages_estimated(→ pandas.DataFrame)Get the estimated generation outages published on the date for the past 30
get_generation_outages_forecast(→ pandas.DataFrame)Get the forecasted generation outages published on the date for the next
get_historical_zonal_load_hourly(→ pandas.DataFrame)get_interchange_5_min(→ pandas.DataFrame)get_interconnection_queue(→ pandas.DataFrame)Get the interconnection queue
get_lmp(→ pandas.DataFrame)Deprecated. Use the per-dataset methods instead:
get_lmp_day_ahead_hourly(→ pandas.DataFrame)Get ExPost day-ahead hourly LMPs for all nodes.
get_lmp_real_time_5_min(→ pandas.DataFrame)Get prelim ExPost real-time 5-minute LMPs for all nodes.
get_lmp_real_time_5_min_final(→ pandas.DataFrame)Retrieves real time final lmp data that includes price corrections to the
get_lmp_real_time_hourly_final(→ pandas.DataFrame)Get final ExPost real-time hourly LMPs for all nodes.
get_lmp_real_time_hourly_prelim(→ pandas.DataFrame)Get prelim ExPost real-time hourly LMPs for all nodes.
get_load(→ pandas.DataFrame)get_load_forecast(→ pandas.DataFrame)https://docs.misoenergy.org/marketreports/YYYYMMDD_df_al.xls
get_look_ahead_hourly(→ pandas.DataFrame)get_multiday_operating_margin(→ pandas.DataFrame)Get the multiday operating margin forecast.
get_multiday_operating_margin_regional(→ pandas.DataFrame)Get the multiday operating margin forecast for all regions.
get_raw_interconnection_queue(→ BinaryIO)get_reserve_product_binding_constraints_day_ahead_hourly(...)get_reserve_product_binding_constraints_real_time_5_min(...)get_solar_forecast(→ pandas.DataFrame)get_subregional_power_balance_constraints_day_ahead_hourly(...)get_subregional_power_balance_constraints_real_time_5_min(...)get_wind_forecast(→ pandas.DataFrame)get_zonal_load_hourly(→ pandas.DataFrame)https://docs.misoenergy.org/marketreports/YYYYMMDD_df_al.xls
- get_area_control_error(date: str | pandas.Timestamp = 'latest', end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
Get the MISO Area Control Error (ACE).
Real-time system-level area control error in MW, published as instantaneous observations roughly every 30 seconds. The source endpoint only serves a rolling window of recent observations, so only “latest” is supported.
- Parameters:
date – Only “latest” is supported.
end – Not supported.
verbose – If True, prints additional information during data retrieval.
- Returns:
DataFrame with columns “Time” and “Area Control Error”.
- get_binding_constraint_overrides_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
- get_binding_constraints_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
- get_binding_constraints_day_ahead_yearly_historical(year: int, verbose: bool = False) pandas.DataFrame[source]#
Get the day-ahead binding constraints data from MISO for a given year.
- Parameters:
year (int) – Year
verbose (bool, optional) – Verbosity. Defaults to False.
- Returns:
Historical day-ahead binding constraints data
- Return type:
pandas.DataFrame
- get_binding_constraints_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
- get_binding_constraints_real_time_intraday(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time binding constraints data from MISO’s intraday API.
This provides active real-time constraint data updated every 5 minutes. Only supports “latest” data.
- Parameters:
date – Must be “latest”.
end – Not used.
verbose – If True, prints additional information during data retrieval.
- Returns:
DataFrame with real-time binding constraint data.
- get_binding_constraints_real_time_yearly_historical(year: int, verbose: bool = False) pandas.DataFrame[source]#
Get the real-time binding constraints data from MISO for a given year.
- Parameters:
year (int) – Year
verbose (bool, optional) – Verbosity. Defaults to False.
- Returns:
Historical real-time binding constraints data
- Return type:
pandas.DataFrame
- get_binding_constraints_supplemental(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
Get the supplemental binding constraints data from MISO.
Source URL: https://www.misoenergy.org/markets-and-operations/real-time–market-data/market-reports/#nt=%2FMarketReportType%3ADay-Ahead%2FMarketReportName%3ABinding Constraints Supplemental (xls)&t=10&p=0&s=MarketReportPublished&sd=desc
- Parameters:
date (str | pd.Timestamp) – Start date
end (str | pd.Timestamp, optional) – End date. Defaults to None.
verbose (bool, optional) – Verbosity. Defaults to False.
- Returns:
Supplemental binding constraints data
- Return type:
pandas.DataFrame
- get_fuel_mix(date: str | pandas.Timestamp, verbose: bool = False) pandas.DataFrame[source]#
Get the fuel mix for a given day for a provided MISO.
- Parameters:
date (datetime.date, str) – “latest”, “today”, “yesterday”, or an object that can be parsed as a datetime for the day to return data.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
DataFrame with columns “Time”, “Load”, “Fuel Mix”
- Return type:
pandas.DataFrame
- get_generation_outages_estimated(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
Get the estimated generation outages published on the date for the past 30 days. NOTE: since these are estimates, they change with each file published.
- get_generation_outages_forecast(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
Get the forecasted generation outages published on the date for the next seven days.
- get_interchange_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
- get_interconnection_queue(verbose: bool = False) pandas.DataFrame[source]#
Get the interconnection queue
- Returns:
Interconnection queue
- Return type:
pandas.DataFrame
- get_lmp(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, market: str = Markets.REAL_TIME_5_MIN, locations: list = 'ALL', verbose: bool = False) pandas.DataFrame[source]#
Deprecated. Use the per-dataset methods instead:
get_lmp_real_time_5_min(),get_lmp_day_ahead_hourly(),get_lmp_real_time_hourly_prelim(),get_lmp_real_time_hourly_final().
- get_lmp_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get ExPost day-ahead hourly LMPs for all nodes.
- get_lmp_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get prelim ExPost real-time 5-minute LMPs for all nodes.
Only today, yesterday, and “latest” are supported.
- get_lmp_real_time_5_min_final(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves real time final lmp data that includes price corrections to the preliminary real time data.
- get_lmp_real_time_hourly_final(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get final ExPost real-time hourly LMPs for all nodes.
- get_lmp_real_time_hourly_prelim(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get prelim ExPost real-time hourly LMPs for all nodes.
Only 4 days of data available, with the most recent being yesterday.
- get_load_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
https://docs.misoenergy.org/marketreports/YYYYMMDD_df_al.xls
- get_look_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_multiday_operating_margin(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
Get the multiday operating margin forecast.
This data comes from the Multiday Operating Margin Forecast (MOMF) report published daily by MISO. The operating margin represents the difference between available resources and system obligations.
- Parameters:
date – The date to retrieve data for.
end – Optional end date for a date range.
verbose – If True, prints additional information during data retrieval.
- Returns:
DataFrame with system-wide operating margin forecast data including committed/uncommitted resources, renewable forecasts, load projections, and operating margin calculations.
- get_multiday_operating_margin_regional(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
Get the multiday operating margin forecast for all regions.
This data comes from the Multiday Operating Margin Forecast (MOMF) report published daily by MISO. The operating margin represents the difference between available resources and system obligations for each region.
- Parameters:
date – The date to retrieve data for.
end – Optional end date for a date range.
verbose – If True, prints additional information during data retrieval.
- Returns:
DataFrame with regional operating margin forecast data for all regions (NORTH, CENTRAL, NORTH+CENTRAL, SOUTH) including committed/uncommitted resources, renewable forecasts, load projections, and regional metrics.
- get_reserve_product_binding_constraints_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
- get_reserve_product_binding_constraints_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
- get_subregional_power_balance_constraints_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
- get_subregional_power_balance_constraints_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
- get_zonal_load_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
https://docs.misoenergy.org/marketreports/YYYYMMDD_df_al.xls
- exception gridstatus.NotSupported[source]#
Bases:
ExceptionCommon base class for all non-exit exceptions.
Initialize self. See help(type(self)) for accurate signature.
- class gridstatus.NYISO[source]#
Bases:
gridstatus.base.ISOBaseNew York Independent System Operator (NYISO)
Attributes
default_timezone
‘US/Eastern’
interconnection_homepage
iso_id
‘nyiso’
markets
None
name
‘New York ISO’
status_homepage
Methods
get_as_prices_day_ahead_hourly(→ pandas.DataFrame)Pull the most recent ancillary service market report's market clearing prices
get_as_prices_real_time_5_min(→ pandas.DataFrame)Pull the most recent ancillary service market report's market clearing prices
get_btm_installed_capacity(→ pandas.DataFrame)Returns NYISO's daily estimate of installed behind-the-meter solar capacity
get_btm_solar(→ pandas.DataFrame)Returns estimated BTM solar generation at a previous date in hourly
get_btm_solar_forecast(→ pandas.DataFrame)get_capacity_prices(→ pandas.DataFrame)Pull the most recent capacity market report's market clearing prices
get_fuel_mix(→ pandas.DataFrame)get_generation_outages_forecast(→ pandas.DataFrame)Get forecasted generation outage capacity for the next 30 days.
get_generators(→ pandas.DataFrame)Get a list of generators in NYISO. When possible return capacity and fuel type information
get_interconnection_queue(→ pandas.DataFrame)Return NYISO interconnection queue
get_interface_limits_and_flows_5_min(→ pandas.DataFrame)Get interface limits and flows for a date
get_lake_erie_circulation_day_ahead(→ pandas.DataFrame)get_lake_erie_circulation_real_time(→ pandas.DataFrame)get_limiting_constraints_day_ahead(→ pandas.DataFrame)get_limiting_constraints_real_time(→ pandas.DataFrame)get_lmp(→ pandas.DataFrame)Deprecated. Use the per-dataset methods instead:
get_lmp_day_ahead_hourly(→ pandas.DataFrame)Get day-ahead hourly LMPs for all zone and generator locations.
get_lmp_real_time_15_min(→ pandas.DataFrame)Get real-time 15-minute (RTC) LMPs for all zone and generator locations.
get_lmp_real_time_5_min(→ pandas.DataFrame)Get real-time 5-minute (RTD) LMPs for all zone and generator locations.
get_lmp_real_time_hourly(→ pandas.DataFrame)Get real-time hourly LMPs for all zone and generator locations.
get_load(→ pandas.DataFrame)Returns load at a previous date in 5 minute intervals for
get_load_forecast(→ pandas.DataFrame)Get load forecast for a date in 1 hour intervals
get_loads(→ pandas.DataFrame)Get a list of loads in NYISO
get_raw_interconnection_queue(→ BinaryIO)get_status(→ pandas.DataFrame)get_zonal_load_forecast(→ pandas.DataFrame)Get zonal load forecast for a date in 1 hour intervals
get_zonal_load_hourly(→ pandas.DataFrame)Get hourly integrated real-time load by zone.
- get_as_prices_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Pull the most recent ancillary service market report’s market clearing prices
- Parameters:
date (pandas.Timestamp) – date that will be used to pull latest capacity report (will refer to month and year)
- get_as_prices_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Pull the most recent ancillary service market report’s market clearing prices
- Parameters:
date (pandas.Timestamp) – date that will be used to pull latest capacity report (will refer to month and year)
- get_btm_installed_capacity(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns NYISO’s daily estimate of installed behind-the-meter solar capacity by zone.
- get_btm_solar(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- Returns estimated BTM solar generation at a previous date in hourly
intervals for system and each zone.
Available ~8 hours after the end of the operating day.
- Parameters:
date (str, pd.Timestamp, datetime.datetime) – Date to get load for. Can be “today”, or a date
end (str, pd.Timestamp, datetime.datetime) – End date for date range. Optional.
verbose (bool) – Whether to print verbose output. Optional.
- Returns:
BTM solar data for NYISO system and each zone
- Return type:
pandas.DataFrame
- get_btm_solar_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_capacity_prices(date: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Pull the most recent capacity market report’s market clearing prices
- Parameters:
date (pandas.Timestamp) – date that will be used to pull latest capacity report (will refer to month and year)
- Returns:
a DataFrame of monthly capacity prices (all three auctions) for each of the four capacity localities within NYISO
- get_fuel_mix(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_generation_outages_forecast(date: str | pandas.Timestamp | Literal['latest'] = 'latest', end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get forecasted generation outage capacity for the next 30 days.
- get_generators(verbose: bool = False) pandas.DataFrame[source]#
Get a list of generators in NYISO. When possible return capacity and fuel type information
- Returns:
a DataFrame of generators and locations
Possible Columns
Generator Name
PTID
Subzone
Zone
Latitude
Longitude
Owner, Operator, and / or Billing Organization
Station Unit
Town
County
State
In-Service Date
Name Plate Rating (V) MW
2024 CRIS MW Summer
2024 CRIS MW Winter
2024 Capability MW Summer
2024 Capability MW Winter
Is Dual Fuel
Unit Type
Fuel Type 1
Fuel Type 2
2023 Net Energy GWh
Notes
Generator Type
- Return type:
pandas.DataFrame
- get_interconnection_queue() pandas.DataFrame[source]#
Return NYISO interconnection queue
Additional Non-NYISO queue info: https://www3.dps.ny.gov/W/PSCWeb.nsf/All/286D2C179E9A5A8385257FBF003F1F7E?OpenDocument
- Returns:
Interconnection queue containing, active, withdrawn, and completed project
- Return type:
pandas.DataFrame
- get_interface_limits_and_flows_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get interface limits and flows for a date
- get_lake_erie_circulation_day_ahead(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_lake_erie_circulation_real_time(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_limiting_constraints_day_ahead(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_limiting_constraints_real_time(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_lmp(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, market: gridstatus.base.Markets | None = None, locations: list | None = None, location_type: NYISOLocationType | None = None, verbose: bool = False) pandas.DataFrame[source]#
Deprecated. Use the per-dataset methods instead:
get_lmp_real_time_5_min(),get_lmp_real_time_15_min(),get_lmp_real_time_hourly(),get_lmp_day_ahead_hourly().
- get_lmp_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get day-ahead hourly LMPs for all zone and generator locations.
- get_lmp_real_time_15_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time 15-minute (RTC) LMPs for all zone and generator locations.
- get_lmp_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time 5-minute (RTD) LMPs for all zone and generator locations.
- get_lmp_real_time_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time hourly LMPs for all zone and generator locations.
- get_load(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- Returns load at a previous date in 5 minute intervals for
each zone and total load
- Parameters:
date (str) – Date to get load for. Can be “today”, or a date in the format YYYY-MM-DD
end (str) – End date for date range. Optional.
verbose (bool) – Whether to print verbose output. Optional.
- Returns:
Load data for NYISO and each zone
- Return type:
pandas.DataFrame
- get_load_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get load forecast for a date in 1 hour intervals
- get_loads() pandas.DataFrame[source]#
Get a list of loads in NYISO
- Returns:
a DataFrame of loads and locations
- Return type:
pandas.DataFrame
- get_status(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- class gridstatus.PJM(api_key: str | None = None, retries: int = DEFAULT_RETRIES)[source]#
Bases:
gridstatus.base.ISOBasePJM
- Parameters:
api_key (str, optional) – PJM API key. Alternatively, can be set in PJM_API_KEY environment variable. Register for an API key at https://www.pjm.com/
Attributes
api_key
None
AS_MARKET_RESULTS_GRANULARITY_CHANGE_DATE
‘2022-09-01’
AS_MARKET_RESULTS_START_DATE
‘2013-06-14’
default_timezone
‘US/Eastern’
hub_node_ids
(‘51217’, ‘116013751’, ‘35010337’, ‘34497151’, ‘34497127’, ‘34497125’, ‘33092315’, ‘33092313’, ‘33092311’, ‘4669664’, ‘51288’, ‘51287’)
interconnection_homepage
‘https://www.pjm.com/planning/service-requests/services-request-status’
iso_id
‘pjm’
load_forecast_5_min_endpoint_name
‘very_short_load_frcst’
load_forecast_endpoint_name
‘load_frcstd_7_day’
load_forecast_historical_endpoint_name
‘load_frcstd_hist’
locale_abbreviated_to_full
None
location_types
(‘ZONE’, ‘LOAD’, ‘GEN’, ‘AGGREGATE’, ‘INTERFACE’, ‘EXT’, ‘HUB’, ‘EHV’, ‘TIE’, ‘RESIDUAL_METERED_EDC’)
markets
None
name
‘PJM’
price_node_ids
(‘5021703’, ‘5021704’, ‘5021723’, ‘5021724’, ‘93354015’, ‘93354017’, ‘93354019’, ‘34887765’, ‘34887767’, ‘34887769’, ‘34887771’, ‘34887773’, ‘34887775’, ‘34887777’, ‘2156111970’, ‘34887779’, ‘34887781’, ‘34887783’, ‘34887787’, ‘34887789’, ‘34887791’, ‘34887793’, ‘74008711’, ‘34887819’, ‘34887821’, ‘34887823’, ‘2156112027’, ‘34887845’, ‘1439658151’, ‘34887847’, ‘34887849’, ‘74008743’, ‘34887851’, ‘34887853’, ‘1123180720’, ‘34887857’, ‘1123180722’, ‘34887859’, ‘1123180723’, ‘34887861’, ‘1123180721’, ‘34887871’, ‘34887873’, ‘34887887’, ‘34887889’, ‘34887891’, ‘34887893’, ‘34887895’, ‘1207075032’, ‘34887897’, ‘34887899’, ‘34887901’, ‘34887911’, ‘34887913’, ‘34887915’, ‘34887917’, ‘34887923’, ‘1097732340’, ‘34887925’, ‘34887927’, ‘34887929’, ‘34887935’, ‘34887937’, ‘34887939’, ‘34887941’, ‘34887949’, ‘34887951’, ‘34887953’, ‘34887955’, ‘1552845076’, ‘34887957’, ‘1552845077’, ‘34887959’, ‘1552845078’, ‘34887961’, ‘34887963’, ‘34887965’, ‘34887967’, ‘34887969’, ‘34887971’, ‘1305131304’, ‘34887977’, ‘1305131306’, ‘34887993’, ‘34887997’, ‘34887999’, ‘34888001’, ‘119118151’, ‘2156114262’, ‘1379266905’, ‘1379266906’, ‘1097732449’, ‘1292915048’, ‘1132294512’, ‘1132294513’, ‘1132294514’, ‘1132294515’, ‘1552845186’, ‘106856851’, ‘2156112284’, ‘1305131444’, ‘119118263’, ‘119118265’, ‘119118267’, ‘119118269’, ‘119118271’, ‘106856905’, ‘2156110343’, ‘40243747’, ‘71856675’, ‘40243749’, ‘71856677’, ‘40243751’, ‘40243753’, ‘40243755’, ‘40243757’, ‘40243759’, ‘40243761’, ‘40243763’, ‘40243765’, ‘40243767’, ‘40243769’, ‘40243771’, ‘40243773’, ‘40243775’, ‘40243777’, ‘40243779’, ‘1248991825’, ‘1248991826’, ‘1248991827’, ‘40243801’, ‘40243803’, ‘40243805’, ‘40243807’, ‘135389793’, ‘135389819’, ‘40243837’, ‘1666116222’, ‘1666116223’, ‘1666116224’, ‘1666116225’, ‘40243839’, ‘1356163765’, ‘38367965’, ‘38367967’, ‘38367969’, ‘1218915048’, ‘1218915049’, ‘1218915050’, ‘1218915051’, ‘1388614399’, ‘2156110624’, ‘32418611’, ‘32418613’, ‘32418615’, ‘32418617’, ‘1388614460’, ‘1084390238’, ‘1218915186’, ‘1218915187’, ‘1369011076’, ‘1369011077’, ‘1369011078’, ‘1268571042’, ‘98370477’, ‘1084390354’, ‘93140’, ‘93141’, ‘93142’, ‘93143’, ‘93144’, ‘93145’, ‘98370523’, ‘98370525’, ‘98370527’, ‘98370529’, ‘98370531’, ‘98370533’, ‘98370535’, ‘1552843818’, ‘57967665’, ‘1552843913’, ‘1552843915’, ‘1552843916’, ‘1356162213’, ‘1356162214’, ‘50401’, ‘48934161’, ‘48934163’, ‘48934165’, ‘48934167’, ‘48934169’, ‘36181299’, ‘50488’, ‘50489’, ‘50490’, ‘36181325’, ‘2156113262’, ‘50542’, ‘50543’, ‘50557’, ‘50558’, ‘2156113284’, ‘50578’, ‘50579’, ‘50581’, ‘50621’, ‘50622’, ‘87901631’, ‘50628’, ‘50629’, ‘50654’, ‘50655’, ‘50659’, ‘50660’, ‘50661’, ‘50662’, ‘2156111333’, ‘1048047’, ‘1048049’, ‘1048050’, ‘1048051’, ‘1048052’, ‘21601782’, ‘21601783’, ‘21601784’, ‘21601785’, ‘21601786’, ‘50695’, ‘50696’, ‘50697’, ‘50698’, ‘50699’, ‘2041990671’, ‘123901459’, ‘123901461’, ‘123901463’, ‘123901465’, ‘123901467’, ‘50715’, ‘50716’, ‘50717’, ‘50727’, ‘50728’, ‘50729’, ‘50730’, ‘2156113457’, ‘2156113469’, ‘50764’, ‘2156113488’, ‘50769’, ‘50770’, ‘50771’, ‘50777’, ‘50778’, ‘50779’, ‘123901537’, ‘123901539’, ‘123901543’, ‘31020649’, ‘123901545’, ‘31020651’, ‘31020653’, ‘50809’, ‘50810’, ‘50811’, ‘50812’, ‘50813’, ‘50814’, ‘50817’, ‘50818’, ‘1165479564’, ‘2156109456’, ‘50887’, ‘50888’, ‘50893’, ‘50894’, ‘50911’, ‘50915’, ‘32417525’, ‘32417527’, ‘2156111608’, ‘1218914041’, ‘1218914042’, ‘1218914043’, ‘32417545’, ‘32417547’, ‘1183231801’, ‘32417599’, ‘32417601’, ‘32417603’, ‘32417605’, ‘51019’, ‘51020’, ‘51021’, ‘1348263767’, ‘32417625’, ‘32417627’, ‘32417629’, ‘32417631’, ‘32417633’, ‘32417635’, ‘1379268471’, ‘1379268472’, ‘1379268473’, ‘1379268474’, ‘1379268475’, ‘1379268476’, ‘63381383’, ‘63381385’, ‘2156111770’, ‘2156109760’, ‘2156109763’, ‘2156109765’, ‘2156109768’, ‘2156109772’, ‘2156109777’, ‘5021665’, ‘5021666’, ‘5021667’, ‘2156111847’, ‘93353961’, ‘93353963’, ‘93353965’)
retries
3
service_type_abbreviated_to_full
None
zone_node_ids
(‘1’, ‘3’, ‘51291’, ‘51292’, ‘51293’, ‘51295’, ‘51296’, ‘51297’, ‘51298’, ‘51299’, ‘51300’, ‘51301’, ‘7633629’, ‘8394954’, ‘8445784’, ‘33092371’, ‘34508503’, ‘34964545’, ‘37737283’, ‘116013753’, ‘124076095’, ‘970242670’, ‘1709725933’)
Methods
Retrieves the actual and scheduled interchange summary data from:
get_actual_operational_statistics(→ pandas.DataFrame)Retrieves the actual operational statistics data from:
get_area_control_error(→ pandas.DataFrame)Retrieves the area control error data from:
get_as_market_results_real_time_hourly(date[, end, ...])Retrieves hourly real-time ancillary service market results prior to 2022-09-01.
get_cleared_virtuals_daily(→ pandas.DataFrame)Retrieves the daily cleared virtual transactions data from:
get_dam_as_market_results(date[, end, verbose])Retrieves the day-ahead ancillary service market results from :
get_day_ahead_demand_bids(→ pandas.DataFrame)Retrieves the day ahead demand bids data from:
get_dispatched_reserves_prelim(→ pandas.DataFrame)Retrieves the dispatched reserves preliminary data from:
get_dispatched_reserves_verified(→ pandas.DataFrame)Retrieves the dispatched reserves verified data from:
get_emergency_postings(→ pandas.DataFrame)Retrieves PJM emergency procedure postings.
get_forecasted_generation_outages(date[, end, verbose])Retrieves the forecasted generation outages for the next 90 days from:
get_fuel_mix(→ pandas.DataFrame)Get fuel mix for a date or date range in hourly intervals
get_gen_outages_by_type(→ pandas.DataFrame)Retrieves the generation outage data
get_generation_capacity_daily(→ pandas.DataFrame)Retrieves the daily generation capacity data from:
get_hourly_net_exports_by_state(→ pandas.DataFrame)Retrieves the hourly net exports by state data from:
get_hourly_transfer_limits_and_flows(→ pandas.DataFrame)Retrieves the hourly transfer limits and flows data from:
get_inc_and_dec_bids_day_ahead_hourly(→ pandas.DataFrame)Retrieves the hourly day-ahead increment and decrement bids data from:
get_instantaneous_dispatch_rates(→ pandas.DataFrame)Retrieves the instantaneous dispatch rate data from:
get_interconnection_queue(→ pandas.DataFrame)Retrieves the interface flows and limit day ahead data from:
get_it_sced_lmp_5_min(→ pandas.DataFrame)Get 5 minute LMPs from the Integrated Forward Market (IFM)
get_lmp(→ pandas.DataFrame)Deprecated. Use the per-dataset methods instead:
get_lmp_day_ahead_hourly(→ pandas.DataFrame)Get day-ahead hourly LMPs for all nodes.
get_lmp_real_time_5_min(→ pandas.DataFrame)Get real-time 5-minute LMPs for all nodes.
get_lmp_real_time_hourly(→ pandas.DataFrame)Get real-time hourly LMPs for all nodes.
get_lmp_real_time_unverified_5_min(→ pandas.DataFrame)Get real-time unverified 5-minute LMPs for a date range.
get_lmp_real_time_unverified_hourly(→ pandas.DataFrame)Get real-time unverified hourly LMPs
get_load(→ pandas.DataFrame)Returns load at a previous date at 5 minute intervals.
get_load_forecast(→ pandas.DataFrame)Load forecast made today extending for six days in hourly intervals.
get_load_forecast_5_min(→ pandas.DataFrame)Load forecast made today extending for 2 hours in 5 minute intervals.
get_load_forecast_historical(→ pandas.DataFrame)Historical load forecast in hourly intervals. Historical forecasts include all
get_load_metered_hourly(date[, end, verbose])Retrieves the hourly metered load data from:
get_marginal_emission_rates_5_min(→ pandas.DataFrame)Retrieves the 5-minute marginal emission rates data from PJM.
get_marginal_value_day_ahead_hourly(→ pandas.DataFrame)Retrieves the marginal value data from:
get_marginal_value_real_time_5_min(→ pandas.DataFrame)Retrieves the marginal value data from:
get_operational_reserves(→ pandas.DataFrame)Retrieves the reserve market quantities in Megawatts from:
get_pai_intervals_5_min(→ pandas.DataFrame)Retrieves the 5-minute Performance Assessment Intervals (PAI) data from PJM.
get_pnode_ids(→ pandas.DataFrame)get_pricing_nodes(→ pandas.DataFrame)Retrieves the pricing nodes data from:
get_projected_area_statistics_at_peak(→ pandas.DataFrame)Area projected data for the peak of the day
get_projected_peak_tie_flow(→ pandas.DataFrame)Retrieves the projected peak tie flow data from:
get_projected_rto_statistics_at_peak(→ pandas.DataFrame)RTO-wide projected data for the peak of the day
get_raw_interconnection_queue(→ BinaryIO)get_real_time_as_market_results(date[, end, verbose])Retrieves the real-time ancillary service market results from :
get_regulation_market_monthly(→ pandas.DataFrame)Retrieves the PJM Regulation Market Monthly data from:
get_regulation_prices_5_min(→ pandas.DataFrame)Retrieves 5-minute regulation pricing data from:
get_reserve_subzone_buses(→ pandas.DataFrame)Retrieves the reserve subzone buses data from:
get_reserve_subzone_resources(→ pandas.DataFrame)Retrieves the reserve subzone resources data from:
get_scheduled_interchange_real_time(→ pandas.DataFrame)Retrieves the scheduled interchange real time data from:
get_settlements_verified_lmp_5_min(→ pandas.DataFrame)get_settlements_verified_lmp_hourly(→ pandas.DataFrame)get_solar_forecast_5_min(→ pandas.DataFrame)Retrieves the 5-min solar forecast including behind the meter solar forecast.
get_solar_forecast_hourly(→ pandas.DataFrame)Retrieves the hourly solar forecast including behind the meter solar forecast.
get_solar_generation_5_min(→ pandas.DataFrame)Retrieves the 5 min solar generation data from:
get_solar_generation_by_area(→ pandas.DataFrame)Retrieves the current solar generation information from:
get_sync_reserve_events(→ pandas.DataFrame)Retrieves the synchronized reserve events data from:
get_tie_flows_5_min(→ pandas.DataFrame)Retrieves the PJM Tie Flows 5 Minute data from:
Retrieves the transfer interface information from:
Retrieves the transmission constraints data from:
get_transmission_limits(→ pandas.DataFrame)Retrieves the current transmission limit information from:
get_voltage_limits(→ str)Downloads the raw voltage limits CSV file from EDART.
Retrieves the weight average aggregation definition data from:
get_wind_forecast_5_min(→ pandas.DataFrame)Retrieves the 5-min wind forecast
get_wind_forecast_hourly(→ pandas.DataFrame)Retrieves the hourly wind forecast
get_wind_generation_by_area(date[, end, verbose])Retrieves the current wind generation information from:
get_wind_generation_instantaneous(→ pandas.DataFrame)Retrieves the instantaneous wind generation data from:
to_local_datetime(→ pandas.Series)- get_actual_and_scheduled_interchange_summary(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the actual and scheduled interchange summary data from: https://dataminer2.pjm.com/feed/actual_and_scheduled_interchange_summary/definition
- get_actual_operational_statistics(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the actual operational statistics data from: https://dataminer2.pjm.com/feed/ops_sum_prev_period/definition
- get_area_control_error(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the area control error data from: https://dataminer2.pjm.com/feed/area_control_error/definition
- get_as_market_results_real_time_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False)[source]#
Retrieves hourly real-time ancillary service market results prior to 2022-09-01.
This method queries historical data before the granularity changed from hourly to 5-minute intervals. For data on or after September 1, 2022, use get_real_time_as_market_results().
- Parameters:
date – Start date. Must be between 2013-06-14 and 2022-08-31.
end – End date. Must be before 2022-09-01.
verbose – Print verbose output.
- Returns:
DataFrame with hourly AS market results.
- get_cleared_virtuals_daily(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the daily cleared virtual transactions data from: https://dataminer2.pjm.com/feed/day_inc_dec_utc/definition
- get_dam_as_market_results(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False)[source]#
Retrieves the day-ahead ancillary service market results from : https://dataminer2.pjm.com/feed/da_reserve_market_results/definition Data is published daily.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with day-ahead ancillary service market results.
- Return type:
pandas.DataFrame
- get_day_ahead_demand_bids(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the day ahead demand bids data from: https://dataminer2.pjm.com/feed/hrl_dmd_bids/definition
- get_dispatched_reserves_prelim(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the dispatched reserves preliminary data from: https://dataminer2.pjm.com/feed/dispatched_reserves/definition
- get_dispatched_reserves_verified(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the dispatched reserves verified data from: https://dataminer2.pjm.com/feed/rt_dispatch_reserves/definition
- get_emergency_postings(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves PJM emergency procedure postings.
When
dateis"latest", triggers the public “Export To XML” button on the guest dashboard (current ~3-day window). Otherwise, uses the public REST endpoint documented in the PJM CLI user guide.The XML contains Publish Time, Canceled Time, proper UTC start/end timestamps, and individual Region elements (one DataFrame row per message-region pair).
- get_forecasted_generation_outages(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False)[source]#
Retrieves the forecasted generation outages for the next 90 days from:
https://dataminer2.pjm.com/feed/frcstd_gen_outages/definition
- get_fuel_mix(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get fuel mix for a date or date range in hourly intervals
- get_gen_outages_by_type(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the generation outage data From: https://dataminer2.pjm.com/feed/gen_outages_by_type/definition
- get_generation_capacity_daily(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the daily generation capacity data from: https://dataminer2.pjm.com/feed/day_gen_capacity/definition
- get_hourly_net_exports_by_state(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the hourly net exports by state data from: https://dataminer2.pjm.com/feed/state_net_interchange/definition
- get_hourly_transfer_limits_and_flows(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the hourly transfer limits and flows data from: https://dataminer2.pjm.com/feed/transfer_limits_and_flows/definition
- get_inc_and_dec_bids_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the hourly day-ahead increment and decrement bids data from: https://dataminer2.pjm.com/feed/hrl_da_incs_decs/definition
Note: This data has a 4-month publication delay.
- get_instantaneous_dispatch_rates(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the instantaneous dispatch rate data from: https://dataminer2.pjm.com/feed/inst_dispatch_rate/definition
- get_interface_flows_and_limits_day_ahead(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the interface flows and limit day ahead data from: https://dataminer2.pjm.com/feed/da_interface_flows_and_limits/definition
- get_it_sced_lmp_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get 5 minute LMPs from the Integrated Forward Market (IFM)
- get_lmp(date: str | pandas.Timestamp, market: str, end: str | pandas.Timestamp | None = None, locations: str = 'hubs', location_type: str | None = None, verbose: bool = False) pandas.DataFrame[source]#
Deprecated. Use the per-dataset methods instead:
get_lmp_real_time_5_min(),get_lmp_real_time_hourly(),get_lmp_day_ahead_hourly().
- get_lmp_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get day-ahead hourly LMPs for all nodes.
- get_lmp_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time 5-minute LMPs for all nodes.
- get_lmp_real_time_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time hourly LMPs for all nodes.
- get_lmp_real_time_unverified_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, locations: str | list | None = 'hubs', location_type: str | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time unverified 5-minute LMPs for a date range.
Mirrors the output shape of
get_lmp(market=REAL_TIME_5_MIN)but always hitsrt_unverified_fivemin_lmpsso callers can pull the freshest data (verified is delayed ~25 minutes).
- get_lmp_real_time_unverified_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, locations: str | None = None, location_type: str | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time unverified hourly LMPs
- get_load(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns load at a previous date at 5 minute intervals.
- Parameters:
date – Date to get load for. Must be in last 30 days.
- Returns:
Load data time series. Columns include Time, Load, and all areas. Load columns represent PJM-wide load. Returns data for the following areas: AE, AEP, APS, ATSI, BC, COMED, DAYTON, DEOK, DOM, DPL, DUQ, EKPC, JC, ME, PE, PEP, PJM MID ATLANTIC REGION, PJM RTO, PJM SOUTHERN REGION, PJM WESTERN REGION, PL, PN, PS, RECO.
- get_load_forecast(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Load forecast made today extending for six days in hourly intervals.
Today’s forecast updates every every half hour on the quarter E.g. 1:15 and 1:45
- get_load_forecast_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Load forecast made today extending for 2 hours in 5 minute intervals.
- get_load_forecast_historical(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Historical load forecast in hourly intervals. Historical forecasts include all vintages of the forecast but has fewer regions than the current forecast.
- get_load_metered_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False)[source]#
Retrieves the hourly metered load data from:
- get_marginal_emission_rates_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the 5-minute marginal emission rates data from PJM.
PJM estimates marginal emissions every five minutes for load zones across the grid. These estimates include CO₂, SO₂, and NOₓ, expressed in lbs/MWh. The calculation reflects the physical costs of power flows, capturing the impact of congestion on nodal emissions. When imports are marginal at a node, PJM assigns them zero emissions because the fuel source is unknown.
Source: https://dataminer2.pjm.com/feed/fivemin_marginal_emissions/definition
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with 5-minute marginal emission rates data.
- Return type:
pandas.DataFrame
- get_marginal_value_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the marginal value data from: https://dataminer2.pjm.com/feed/da_marginal_value/definition
- get_marginal_value_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the marginal value data from: https://dataminer2.pjm.com/feed/rt_marginal_value/definition
- get_operational_reserves(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the reserve market quantities in Megawatts from: https://dataminer2.pjm.com/feed/operational_reserves/definition Only available in past 15 days.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
- A DataFrame with reserve market quantities
in 15 second intervals.
- Return type:
pandas.DataFrame
- get_pai_intervals_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the 5-minute Performance Assessment Intervals (PAI) data from PJM.
This dataset contains information on the status of Performance Assessment Intervals (PAIs) across PJM and subzones, updated every 5 minutes. Performance during these PAIs is used by PJM to determine potential penalties, or compensation, for capacity obligations. This dataset has 3 potential responses in the Performance Assessment Interval column: “No PAI”, “PAI in Active Subzone”, and “PAI in RTO and Active Subzone”.
Source: https://dataminer2.pjm.com/feed/fivemin_pai_interval/definition
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with 5-minute PAI intervals data.
- Return type:
pandas.DataFrame
- get_pricing_nodes(as_of: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the pricing nodes data from: https://dataminer2.pjm.com/feed/pnode/definition
- get_projected_area_statistics_at_peak(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Area projected data for the peak of the day
https://dataminer2.pjm.com/feed/ops_sum_frcst_peak_area/definition
- get_projected_peak_tie_flow(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the projected peak tie flow data from: https://dataminer2.pjm.com/feed/ops_sum_prjctd_tie_flow/definition
- get_projected_rto_statistics_at_peak(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
RTO-wide projected data for the peak of the day
https://dataminer2.pjm.com/feed/ops_sum_frcst_peak_rto/definition
- get_real_time_as_market_results(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False)[source]#
Retrieves the real-time ancillary service market results from : https://dataminer2.pjm.com/feed/reserve_market_results/definition Data for the previous day is published daily on business days, typically between 11am and 12pm market time.
Data granularity changed on Sep 1, 2022 so when querying data, start and end dates must both be before or both after that date.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with real-time ancillary service market results.
- Return type:
pandas.DataFrame
- get_regulation_market_monthly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the PJM Regulation Market Monthly data from: https://dataminer2.pjm.com/feed/reg_market_results/definition
- get_regulation_prices_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves 5-minute regulation pricing data from: https://api.pjm.com/api/v1/reg_prices
- get_reserve_subzone_buses(as_of: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the reserve subzone buses data from: https://dataminer2.pjm.com/feed/sync_pri_reserves_buses_list/definition
- get_reserve_subzone_resources(as_of: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the reserve subzone resources data from: https://dataminer2.pjm.com/feed/sync_pri_reserves_resources_list/definition
- get_scheduled_interchange_real_time(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the scheduled interchange real time data from: https://dataminer2.pjm.com/feed/rt_scheduled_interchange/definition
- get_settlements_verified_lmp_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_settlements_verified_lmp_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_solar_forecast_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the 5-min solar forecast including behind the meter solar forecast. From: https://dataminer2.pjm.com/feed/five_min_solar_power_forecast/definition Only available in past 30 days
- Parameters:
date (str | pd.Timestamp) – Start datetime for data
end (str | pd.Timestamp | None, optional) – End datetime for data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with the solar forecast data.
- Return type:
pd.DataFrame
- get_solar_forecast_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the hourly solar forecast including behind the meter solar forecast. From: https://dataminer2.pjm.com/feed/hourly_solar_power_forecast/definition Only available in past 30 days
- Parameters:
date (str | pd.Timestamp) – Start datetime for data
end (str | pd.Timestamp | None, optional) – End datetime for data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with the solar forecast data.
- Return type:
pd.DataFrame
- get_solar_generation_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the 5 min solar generation data from: https://dataminer2.pjm.com/feed/five_min_solar_generation/definition Only available in past 30 days.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with 5 minute solar generation data.
- Return type:
pandas.DataFrame
- get_solar_generation_by_area(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the current solar generation information from: https://dataminer2.pjm.com/feed/solar_gen/definition Data is published daily around 7am market time.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with solar generation information.
- Return type:
pandas.DataFrame
- get_sync_reserve_events(verbose: bool = False) pandas.DataFrame[source]#
Retrieves the synchronized reserve events data from: https://dataminer2.pjm.com/feed/sync_reserve_events/definition
- get_tie_flows_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the PJM Tie Flows 5 Minute data from: https://dataminer2.pjm.com/feed/tie_flows/definition
- get_transfer_interface_information_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the transfer interface information from: https://dataminer2.pjm.com/feed/transfer_interface_infor/definition Only available in past 30 days.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with transfer interface information in 5 minute intervals.
- Return type:
pandas.DataFrame
- get_transmission_constraints_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the transmission constraints data from: https://dataminer2.pjm.com/feed/da_transconstraints/definition
- get_transmission_limits(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the current transmission limit information from: https://dataminer2.pjm.com/feed/transfer_interface_infor/definition Only available in past 30 days. Data is published only when constraints exist for that five minute interval.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with transmission limit information in 5 minute intervals, when data is available.
- Return type:
pandas.DataFrame
- get_voltage_limits(verbose: bool = False) str[source]#
Downloads the raw voltage limits CSV file from EDART.
The URL returns a ZIP file containing the CSV. This method extracts and returns the CSV content as a string.
Source: https://edart.pjm.com/reports/voltagelimits.csv
- Parameters:
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
The CSV content as a string.
- Return type:
str
- Raises:
NoDataFoundException – If the server returns a rate limit message.
- get_weight_average_aggregation_definition(as_of: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the weight average aggregation definition data from: https://dataminer2.pjm.com/feed/agg_definitions/definition
- get_wind_forecast_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the 5-min wind forecast From: https://dataminer2.pjm.com/feed/five_min_wind_power_forecast/definition Only available in past 30 days
- Parameters:
date (str | pd.Timestamp) – Start datetime for data
end (Optional[str | pd.Timestamp], optional) – End datetime for data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with the wind forecast data.
- Return type:
pd.DataFrame
- get_wind_forecast_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the hourly wind forecast From: https://dataminer2.pjm.com/feed/hourly_wind_power_forecast/definition Only available in past 30 days
- Parameters:
date (str | pd.Timestamp) – Start datetime for data
end (Optional[str | pd.Timestamp], optional) – End datetime for data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with the wind forecast data.
- Return type:
pd.DataFrame
- get_wind_generation_by_area(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False)[source]#
Retrieves the current wind generation information from: https://dataminer2.pjm.com/feed/wind_gen/definition Data is published daily around 7am market time.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with wind generation information.
- Return type:
pandas.DataFrame
- get_wind_generation_instantaneous(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the instantaneous wind generation data from: https://dataminer2.pjm.com/feed/instantaneous_wind_gen/definition Only available in past 30 days.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
- A DataFrame with instantaneous wind generation data
in 15 second intervals.
- Return type:
pandas.DataFrame
- class gridstatus.SPP[source]#
Bases:
gridstatus.base.ISOBaseSouthwest Power Pool (SPP)
Attributes
default_timezone
‘US/Central’
interconnection_homepage
‘https://www.spp.org/engineering/generator-interconnection/’
iso_id
‘spp’
location_types
None
markets
None
name
‘Southwest Power Pool’
status_homepage
‘https://www.spp.org/markets-operations/current-grid-conditions/’
Methods
get_as_prices_real_time_5_min(→ pandas.DataFrame)Provides Marginal Clearing Price information by Reserve Zone for each
Get Day-Ahead Binding Constraints
get_binding_constraints_real_time_5_min(→ pandas.DataFrame)Get Real-Time Binding Constraints
get_capacity_of_generation_on_outage(→ pandas.DataFrame)Get Capacity of Generation on Outage.
Get VER Curtailments for a year. Starting 2014.
get_day_ahead_operating_reserve_prices(→ pandas.DataFrame)Provides Marginal Clearing Price information by Reserve Zone for each
get_fuel_mix(→ pandas.DataFrame)Get combined fuel mix summed across SPP and SWPW BAAs
get_fuel_mix_by_baa(→ pandas.DataFrame)Get fuel mix for both SPP and SWPW BAAs with a BAA column
get_fuel_mix_by_baa_detailed(→ pandas.DataFrame)Get detailed fuel mix for both SPP and SWPW BAAs with a BAA column
get_fuel_mix_detailed(→ pandas.DataFrame)Get combined detailed fuel mix summed across SPP and SWPW BAAs
get_hourly_load(→ pandas.DataFrame)Get Hourly Load in the long format (on or after 2026-03-24).
get_hourly_load_annual(→ pandas.DataFrame)Get Hourly Load for a year. Starting 2011.
get_hourly_load_historical(→ pandas.DataFrame)Get Hourly Load in the legacy wide format (before 2026-03-24).
get_interchange_real_time(→ pandas.DataFrame)Get real-time interchange (tie flow) data.
get_interconnection_queue(→ pandas.DataFrame)Get interconnection queue
get_lmp_day_ahead_hourly(→ pandas.DataFrame)Get day ahead hourly LMP data
get_lmp_day_ahead_hourly_by_bus(→ pandas.DataFrame)Get day ahead hourly LMP data by bus (pnode-level).
get_lmp_real_time_5_min_by_bus(→ pandas.DataFrame)Get LMP data by bus for the Real-Time 5 Minute Market
get_lmp_real_time_5_min_by_location(→ pandas.DataFrame)Get LMP data by location for the Real-Time 5 Minute Market
get_lmp_real_time_weis(→ pandas.DataFrame)Get LMP data for real time WEIS
get_load(→ pandas.DataFrame)Returns total RTO load in 5 minute intervals from STLF data.
get_load_by_baa(→ pandas.DataFrame)Returns actual load by BAA from short-term load forecast data.
get_load_by_baa_hourly(→ pandas.DataFrame | None)Returns hourly actual load by BAA from mid-term load forecast data.
get_load_forecast(→ pandas.DataFrame)Returns total RTO load forecast in hourly intervals from MTLF data.
get_load_forecast_by_baa(→ pandas.DataFrame)Returns hourly load forecast by BAA from MTLF data.
get_load_forecast_mid_term(→ pandas.DataFrame | None)Returns load forecast for +7 days in hourly intervals. Includes actual load
get_load_forecast_short_term(→ pandas.DataFrame | None)5-minute load forecast data for the SPP footprint (system-wide) for +/- 10
get_market_clearing_day_ahead(→ pandas.DataFrame)Get Market Clearing Day Ahead
get_market_clearing_real_time(→ pandas.DataFrame)Get Market Clearing Real Time
get_operating_reserves(→ pandas.DataFrame)get_raw_interconnection_queue(→ BinaryIO)Returns hourly solar and wind forecasts and actuals by reserve zone.
Returns solar and wind generation forecast for +7 days in hourly intervals.
Returns solar and wind generation forecast for +4 hours in 5 minute intervals.
get_ver_curtailments(→ pandas.DataFrame)Get VER Curtailments summed across BAAs.
get_ver_curtailments_annual(→ pandas.DataFrame)Get VER Curtailments summed across BAAs for a year. Starting 2014.
get_ver_curtailments_by_baa(→ pandas.DataFrame)Get VER Curtailments broken down by BAA.
get_ver_curtailments_by_baa_annual(→ pandas.DataFrame)Get VER Curtailments broken down by BAA for a year. Starting 2014.
get_west_interchange_real_time(→ pandas.DataFrame)Get real-time interchange (tie flow) data for SPP West (SWPW).
now()- get_as_prices_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False, use_daily_files: bool = False) pandas.DataFrame[source]#
Provides Marginal Clearing Price information by Reserve Zone for each Real-Time 5-minute Market solution.
- Parameters:
date – date to get data for. Supports “latest” for most recent interval.
end – end date
verbose – print url
use_daily_files – if True, use daily files instead of 5 minute files.
- Returns:
Real-Time 5-minute Marginal Clearing Prices
- Return type:
pd.DataFrame
- get_binding_constraints_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Day-Ahead Binding Constraints
- Parameters:
date – date to get data for. Supports “latest” for most recently available data.
end – end date
verbose – print url
- Returns:
Day-Ahead Binding Constraints
- Return type:
pd.DataFrame
- get_binding_constraints_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Real-Time Binding Constraints
- Parameters:
date – date to get data for. Supports “latest” for most recent interval.
end – end date
verbose – print url
- Returns:
Real-Time Binding Constraints
- Return type:
pd.DataFrame
- get_capacity_of_generation_on_outage(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Capacity of Generation on Outage.
Published daily at 8am CT for next 7 days
- Parameters:
date – start date
end – end date
- get_capacity_of_generation_on_outage_annual(year: int, verbose: bool = True) pandas.DataFrame[source]#
Get VER Curtailments for a year. Starting 2014. Recent data use get_capacity_of_generation_on_outage
- Parameters:
year – year to get data for
verbose – print url
- Returns:
VER Curtailments
- Return type:
pd.DataFrame
- get_day_ahead_operating_reserve_prices(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Provides Marginal Clearing Price information by Reserve Zone for each Day-Ahead Market solution for each Operating Day. Posting is updated each day after the DA Market results are posted. Available at https://portal.spp.org/pages/da-mcp#
- Parameters:
date – date to get data for
end – end date
verbose – print url
- Returns:
Day Ahead Marginal Clearing Prices
- Return type:
pd.DataFrame
- get_fuel_mix(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get combined fuel mix summed across SPP and SWPW BAAs
- Parameters:
date – “latest”, “today”, a timestamp, or a date range tuple
end – optional end date for range queries
- Returns:
fuel mix summed across both BAAs
- Return type:
pd.DataFrame
- get_fuel_mix_by_baa(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get fuel mix for both SPP and SWPW BAAs with a BAA column
- Parameters:
date – “latest”, “today”, a timestamp, or a date range tuple
end – optional end date for range queries
- Returns:
fuel mix with BAA column differentiating SPP and SWPW
- Return type:
pd.DataFrame
- get_fuel_mix_by_baa_detailed(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get detailed fuel mix for both SPP and SWPW BAAs with a BAA column
Breaks out self scheduled and market scheduled generation.
- Parameters:
date – “latest”, “today”, a timestamp, or a date range tuple
end – optional end date for range queries
- Returns:
detailed fuel mix with BAA column
- Return type:
pd.DataFrame
- get_fuel_mix_detailed(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get combined detailed fuel mix summed across SPP and SWPW BAAs
Breaks out self scheduled and market scheduled generation.
- Parameters:
date – “latest”, “today”, a timestamp, or a date range tuple
end – optional end date for range queries
- Returns:
detailed fuel mix summed across both BAAs
- Return type:
pd.DataFrame
- get_hourly_load(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Hourly Load in the long format (on or after 2026-03-24).
- Parameters:
date – start date (must be on or after 2026-03-24)
end – end date
- Returns:
- Hourly Load with columns Time, Interval Start,
Interval End, Balancing Area Name, Control Zone Name, Forecast Area Type, Load
- Return type:
pd.DataFrame
- get_hourly_load_annual(year: int, verbose: bool = True) pandas.DataFrame[source]#
Get Hourly Load for a year. Starting 2011. For recent data use get_hourly_load
- Parameters:
year – year to get data for
verbose – print url
- Returns:
Hourly Load
- Return type:
pd.DataFrame
- get_hourly_load_historical(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Hourly Load in the legacy wide format (before 2026-03-24).
Deprecated: SPP changed the hourly load data format on 2026-03-24. Use get_hourly_load for data on or after 2026-03-24.
- Parameters:
date – start date (must be before 2026-03-24)
end – end date
- Returns:
Hourly Load in wide format
- Return type:
pd.DataFrame
- get_interchange_real_time(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time interchange (tie flow) data.
For “latest” and “today”, returns ~2 days of 1-minute interchange data from the real-time endpoint.
For historical dates, downloads monthly CSV files from the historical tie flow archive.
Data from: - Real-time: https://portal.spp.org/pages/integrated-marketplace-interchange-trend - Historical: https://portal.spp.org/pages/historical-tie-flow
- Parameters:
date – supports “latest”, “today”, or a historical date/date range
end – end date for historical range queries
verbose – print info
- Returns:
interchange data
- Return type:
pd.DataFrame
- get_interconnection_queue(verbose: bool = False) pandas.DataFrame[source]#
Get interconnection queue
- Returns:
Interconnection queue
- Return type:
pandas.DataFrame
- get_lmp_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, location_type: str = LOCATION_TYPE_ALL, verbose: bool = False) pandas.DataFrame[source]#
Get day ahead hourly LMP data
- Supported Location Types:
HubInterfaceALL
- get_lmp_day_ahead_hourly_by_bus(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get day ahead hourly LMP data by bus (pnode-level).
- Parameters:
date – date to get data for
end – end date
verbose – print url
NOTE: does not take a location_type argument because it always returns LOCATION_TYPE_BUS.
- get_lmp_real_time_5_min_by_bus(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get LMP data by bus for the Real-Time 5 Minute Market
- Parameters:
date – date to get data for
end – end date
verbose – print url
NOTE: does not take a location_type argument because it always returns LOCATION_TYPE_BUS.
- get_lmp_real_time_5_min_by_location(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, location_type: str = LOCATION_TYPE_ALL, verbose: bool = False, use_daily_files: bool = False) pandas.DataFrame[source]#
Get LMP data by location for the Real-Time 5 Minute Market
- Parameters:
date – date to get data for
end – end date
location_type – location type to get data for. Options are: -
ALL(LOCATION_TYPE_ALL) -Hub(LOCATION_TYPE_HUB) -Interface(LOCATION_TYPE_INTERFACE) -Settlement Location(LOCATION_TYPE_SETTLEMENT_LOCATION)verbose – print url
use_daily_files – if True, use daily files instead of 5 minute files.
- get_lmp_real_time_weis(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get LMP data for real time WEIS
- Parameters:
date – date to get data for. if end is not provided, will get data for 5 minute interval that date is in.
end – end date
verbose – print url
- get_load(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns total RTO load in 5 minute intervals from STLF data.
- get_load_by_baa(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns actual load by BAA from short-term load forecast data.
- get_load_by_baa_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame | None[source]#
Returns hourly actual load by BAA from mid-term load forecast data.
- get_load_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns total RTO load forecast in hourly intervals from MTLF data.
- get_load_forecast_by_baa(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns hourly load forecast by BAA from MTLF data.
- get_load_forecast_mid_term(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame | None[source]#
Returns load forecast for +7 days in hourly intervals. Includes actual load for the past 24 hours. Data from https://portal.spp.org/pages/mtlf-vs-actual
- Parameters:
date (pd.Timestamp|str) – date to get data for. Supports “latest” and “today”
verbose (bool) – print info
- Returns:
forecast as dataframe.
- Return type:
pd.DataFrame
- get_load_forecast_short_term(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False, drop_null_forecast_rows: bool = True) pandas.DataFrame | None[source]#
5-minute load forecast data for the SPP footprint (system-wide) for +/- 10 minutes. Also includes actual load.
Data from https://portal.spp.org/pages/stlf-vs-actual
- Parameters:
date (pd.Timestamp|str) – date to get data for. Supports “latest” and “today”
verbose (bool) – print info
end (pd.Timestamp|str) – end date
drop_null_forecast_rows (bool) – if True, drop rows with null forecast values
- Returns:
forecast as dataframe.
- Return type:
pd.DataFrame
- get_market_clearing_day_ahead(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Market Clearing Day Ahead
- Parameters:
date – start date
end – end date
- Returns:
Market Clearing Day Ahead
- Return type:
pd.DataFrame
- get_market_clearing_real_time(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Market Clearing Real Time
- Parameters:
date – start date
end – end date
- Returns:
Market Clearing Real Time
- Return type:
pd.DataFrame
- get_operating_reserves(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_solar_and_wind_forecast_by_reserve_zone(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame | None[source]#
Returns hourly solar and wind forecasts and actuals by reserve zone.
Data from https://portal.spp.org/pages/resource-forecast-by-reserve-zone. The
dateparameter is the publish hour of the source file.
- get_solar_and_wind_forecast_mid_term(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame | None[source]#
Returns solar and wind generation forecast for +7 days in hourly intervals.
Data from https://portal.spp.org/pages/midterm-resource-forecast.
- Parameters:
date (pd.Timestamp|str) – date to get data for. Supports “latest” and “today”
verbose (bool) – print info
- Returns:
forecast as dataframe.
- Return type:
pd.DataFrame
- get_solar_and_wind_forecast_short_term(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame | None[source]#
Returns solar and wind generation forecast for +4 hours in 5 minute intervals. Include actuals for past day in 5 minute intervals.
Data from https://portal.spp.org/pages/shortterm-resource-forecast
- Parameters:
date (pd.Timestamp|str) – date to get data for. Supports “latest” and “today”
verbose (bool) – print info
- Returns:
forecast as dataframe.
- Return type:
pd.DataFrame
- get_ver_curtailments(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get VER Curtailments summed across BAAs.
Supports recent data. For historical annual data use get_ver_curtailments_annual. For data broken down by BAA use get_ver_curtailments_by_baa.
- Parameters:
date – start date
end – end date
- get_ver_curtailments_annual(year: int, verbose: bool = True) pandas.DataFrame[source]#
Get VER Curtailments summed across BAAs for a year. Starting 2014.
Recent data use get_ver_curtailments. For data broken down by BAA use get_ver_curtailments_by_baa_annual.
- Parameters:
year – year to get data for
verbose – print url
- Returns:
VER Curtailments
- Return type:
pd.DataFrame
- get_ver_curtailments_by_baa(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get VER Curtailments broken down by BAA.
Supports recent data. For historical annual data use get_ver_curtailments_by_baa_annual.
- Parameters:
date – start date
end – end date
- get_ver_curtailments_by_baa_annual(year: int, verbose: bool = True) pandas.DataFrame[source]#
Get VER Curtailments broken down by BAA for a year. Starting 2014.
Recent data use get_ver_curtailments_by_baa.
- Parameters:
year – year to get data for
verbose – print url
- Returns:
VER Curtailments
- Return type:
pd.DataFrame
- get_west_interchange_real_time(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time interchange (tie flow) data for SPP West (SWPW).
For “latest” and “today”, returns ~2 days of 1-minute interchange data from the real-time endpoint.
For historical dates, downloads monthly CSV files from the historical tie flow archive.
Data from: - Real-time: https://portal.spp.org/pages/integrated-marketplace-interchange-trend - Historical: https://portal.spp.org/pages/historical-tie-flow
- Parameters:
date – supports “latest”, “today”, or a historical date/date range
end – end date for historical range queries
verbose – print info
- Returns:
interchange data
- Return type:
pd.DataFrame