Gridstatus

Contents

Gridstatus#

Subpackages#

Submodules#

Package Contents#

Classes Summary#

AESO

API client for Alberta Electric System Operator (AESO) data.

CAISO

California Independent System Operator (CAISO)

Ercot

Electric Reliability Council of Texas (ERCOT)

IESO

Independent Electricity System Operator (IESO)

ISONE

ISO New England (ISONE)

Markets

Names of LMP Markets

MISO

Midcontinent Independent System Operator (MISO)

NYISO

New York Independent System Operator (NYISO)

PJM

PJM

SPP

Southwest Power Pool (SPP)

Exceptions Summary#

Functions#

get_iso(→ gridstatus.base.ISOBase)

Get an ISO by its id

list_isos(→ pandas.DataFrame)

List available ISOs

load_folder(→ pandas.DataFrame)

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

https://apimgw.aeso.ca/public

default_headers

None

default_timezone

‘US/Mountain’

HISTORICAL_FORECAST_EARLIEST

None

HISTORICAL_FORECAST_LATEST

None

MAX_NAVIGATION_ATTEMPTS

100

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.ISOBase

California Independent System Operator (CAISO)

Attributes

default_timezone

‘US/Pacific’

interconnection_homepage

https://rimspub.caiso.com/rimsui/logon.do

iso_id

‘caiso’

markets

None

name

‘California ISO’

status_homepage

https://www.caiso.com/TodaysOutlook/Pages/default.aspx

trading_hub_locations

[‘TH_NP15_GEN-APND’, ‘TH_SP15_GEN-APND’, ‘TH_ZP26_GEN-APND’]

Methods

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

get_curtailed_non_operational_generator_report(...)

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_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_intertie_constraint_shadow_prices_real_time_5_min(...)

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_lmp(date, market[, locations, sleep, end, verbose])

Get LMP pricing starting at supplied date for a list of locations.

get_lmp_hasp_15_min(→ pandas.DataFrame)

Get LMP HASP 15-min data from CAISO.

get_lmp_scheduling_point_tie_day_ahead_hourly(...)

get_lmp_scheduling_point_tie_real_time_15_min(...)

get_lmp_scheduling_point_tie_real_time_5_min(...)

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

get_nomogram_branch_shadow_price_forecast_15_min(...)

Returns 15-minute nomogram/branch shadow price forecast from the Real-Time Pre-Dispatch Market.

get_nomogram_branch_shadow_prices_day_ahead_hourly(...)

Returns hourly day-ahead nomogram/branch shadow price forecast.

get_nomogram_branch_shadow_prices_hasp_hourly(...)

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_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_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_system_load_and_resource_schedules_day_ahead(...)

Get CAISO System Load and Resource Schedules Day-Ahead data from CAISO.

get_system_load_and_resource_schedules_hasp(...)

Get CAISO System Load and Resource Schedules HASP data from CAISO.

get_system_load_and_resource_schedules_real_time_5_min(...)

Get CAISO System Load and Resource Schedules Real Time data from CAISO.

get_system_load_and_resource_schedules_ruc(...)

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_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_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 date parameter. Only specify one of date or start.

  • 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_interconnection_queue(verbose: bool = False) pandas.DataFrame[source]#
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_lmp(date: str | pandas.Timestamp, market: str, locations: list = None, sleep: int = 5, end: str | pandas.Timestamp = None, verbose: bool = False)[source]#

Get LMP pricing starting at supplied date for a list of locations.

Parameters:
  • date (datetime.date, str) – date to return data

  • market – market to return from. supports:

  • locations (list) – list of locations to get data from. If no locations are provided, defaults to NP15, SP15, and ZP26, which are the trading hub locations. USE “ALL_AP_NODES” for all Aggregate Pricing Node. Use “ALL” to get all nodes. For a list of locations, call CAISO.get_pnodes()

  • sleep (int) – number of seconds to sleep before returning to avoid hitting rate limit in regular usage. Defaults to 5 seconds.

Returns:

A DataFrame of pricing data

Return type:

pandas.DataFrame

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_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_pnodes(verbose: bool = False) pandas.DataFrame[source]#
get_raw_interconnection_queue(verbose: bool = False) pandas.DataFrame[source]#
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_stats(verbose: bool = False) dict[source]#
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_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

get_tie_flows_real_time_15_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
list_oasis_datasets(dataset: str | None = None)[source]#

List all available OASIS datasets and their parameters.

Parameters:

dataset (str, optional) – dataset to return data for. If None, returns all datasets.

class gridstatus.Ercot[source]#

Bases: gridstatus.base.ISOBase

Electric 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

https://www.ercot.com/api/1/services/read/dashboards

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’

SCED_SUPPLEMENTAL_CORRECTION_END

None

SCED_SUPPLEMENTAL_CORRECTION_START

None

status_homepage

https://www.ercot.com/gridmktinfo/dashboards/gridconditions

Methods

ambiguous_based_on_dstflag(→ pandas.Series)

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_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

get_available_seasonal_capacity_forecast(...)

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_cop_adjustment_period_snapshot_60_day(...)

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_highest_price_as_offer_selected_sced(...)

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)

Get LMP data for ERCOT normally produced by SCED every five minutes

get_lmp_by_bus_dam(→ pandas.DataFrame)

Get Day-Ahead Market (DAM) LMPs by Electrical Bus

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_noie_mapping(→ pandas.DataFrame)

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_settlement_points_electrical_bus_mapping(...)

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_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(...)

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)

ambiguous_based_on_dstflag(df: pandas.DataFrame) pandas.Series[source]#
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)

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_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_price_corrections(dam_type: str, 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

Source:

https://www.ercot.com/mp/data-products/data-product-details?id=NP4-180-ER

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 = 'latest', 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, or “latest” for most recent data

  • 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. Supports “latest”

  • 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

Monthly historical data available here:

http://mis.ercot.com/misapp/GetReports.do?reportTypeId=15933&reportTitle=GIS%20Report&showHTMLView=&mimicKey

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]#

Get LMP data for ERCOT normally produced by SCED every five minutes

Can specify the location type to return “electrical bus” or “settlement point” data. Defaults to “settlement point”

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 “latest”, “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_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) – “latest”, “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 “latest” or 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

Source:

https://www.ercot.com/mp/data-products/data-product-details?id=NP3-565-CD

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 “latest”, “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(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_noie_mapping(date: str | pandas.Timestamp | None = None, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
get_raw_interconnection_queue(verbose: bool = False) BinaryIO[source]#
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, 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

Source:

https://www.ercot.com/mp/data-products/data-product-details?id=NP6-785-ER

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_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 “latest”, “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_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 “latest” or 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 “latest” or 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_MIN

  • DAY_AHEAD_HOURLY

Supported Location Types:
  • Load Zone

  • Trading Hub

  • Resource 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. Supports “latest”

  • 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. Supports “latest”

  • 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]#
read_doc(doc: Document, parse: bool = True, verbose: bool = False, request_kwargs: dict | None = None, read_csv_kwargs: dict | None = None) pandas.DataFrame[source]#
read_docs(docs: list[Document], parse: bool = True, empty_df: pandas.DataFrame | None = None, verbose: bool = False, request_kwargs: dict | None = None) 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.ISOBase

Independent Electricity System Operator (IESO)

Attributes

default_timezone

‘EST’

iso_id

‘ieso’

name

‘Independent Electricity System Operator’

status_homepage

https://www.ieso.ca/en/Power-Data

Methods

get_forecast_surplus_baseload_generation(...)

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_actual_schedule_flow_hourly(...)

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_mcp_real_time_5_min()

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.

get_resource_adequacy_report_by_last_modified(...)

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(...)

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_mcp_real_time_5_min()[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.ISOBase

ISO New England (ISONE)

Attributes

default_timezone

‘US/Eastern’

hubs

None

interconnection_homepage

https://irtt.iso-ne.com/reports/external

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, ...])

Find Node ID mapping:

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]#
Find Node ID mapping:

https://www.iso-ne.com/markets-operations/settlements/pricing-node-tables/

get_load(date, end=None, verbose=False)[source]#

Return load at a previous date in 5 minute intervals

get_load_forecast(date, end=None, verbose=False)[source]#

Return forecast at a previous date

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_status(date, verbose=False)[source]#

Get latest status for ISO NE

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.list_isos() pandas.DataFrame[source]#

List available ISOs

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.StrEnum

Names 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).

__contains__(item)[source]#

Return bool(key in self).

class gridstatus.MISO[source]#

Bases: gridstatus.base.ISOBase

Midcontinent 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_binding_constraint_overrides_real_time_5_min(...)

get_binding_constraints_day_ahead_hourly(...)

get_binding_constraints_day_ahead_yearly_historical(...)

Get the day-ahead binding constraints data from MISO for a given year.

get_binding_constraints_real_time_5_min(→ pandas.DataFrame)

get_binding_constraints_real_time_intraday(...)

Get real-time binding constraints data from MISO's intraday API.

get_binding_constraints_real_time_yearly_historical(...)

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)

Supported Markets:

get_lmp_real_time_5_min_final(→ pandas.DataFrame)

Retrieves real time final lmp data that includes price corrections to the

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_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_historical_zonal_load_hourly(year: int) pandas.DataFrame[source]#
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]#
Supported Markets:
  • REAL_TIME_5_MIN - (Prelim ExPost 5 Minute)

  • DAY_AHEAD_HOURLY - (ExPost Day Ahead Hourly)

  • REAL_TIME_HOURLY_FINAL - (Final ExPost Real Time Hourly)

  • REAL_TIME_HOURLY_PRELIM - (Prelim ExPost Real Time Hourly)

    Only 4 days of data available, with the most recent being yesterday.

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.

Data from: https://www.misoenergy.org/markets-and-operations/real-time–market-data/market-reports/#nt=%2FMarketReportType%3AHistorical%20LMP%2FMarketReportName%3AWeekly%20Real-Time%205-Min%20LMP%20(zip)&t=10&p=0&s=MarketReportPublished&sd=desc

get_load(date: str | pandas.Timestamp, verbose: bool = False) pandas.DataFrame[source]#
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_raw_interconnection_queue(verbose: bool = False) BinaryIO[source]#
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_solar_forecast(date: str | pandas.Timestamp, 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_wind_forecast(date: str | pandas.Timestamp, 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: Exception

Common base class for all non-exit exceptions.

Initialize self. See help(type(self)) for accurate signature.

class gridstatus.NYISO[source]#

Bases: gridstatus.base.ISOBase

New York Independent System Operator (NYISO)

Attributes

default_timezone

‘US/Eastern’

interconnection_homepage

https://www.nyiso.com/interconnections

iso_id

‘nyiso’

markets

None

name

‘New York ISO’

status_homepage

https://www.nyiso.com/system-conditions

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_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_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)

Supported Markets:

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_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_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_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]#
Supported Markets:
  • REAL_TIME_5_MIN (RTC)

  • REAL_TIME_15_MIN (RTD)

  • REAL_TIME_HOURLY (Real-time hourly LMP)

  • DAY_AHEAD_HOURLY

Supported Location Types:
  • zone

  • generator

NOTE: the generator data contains the single Reference Bus location type.

REAL_TIME_5_MIN is the Real Time Dispatch (RTD) market. REAL_TIME_15_MIN is the Real Time Commitment (RTC) market. REAL_TIME_HOURLY is the real-time hourly LMP market. For documentation on real time dispatch and real time commitment, see: https://www.nyiso.com/documents/20142/1404816/RTC-RTD%20Convergence%20Study.pdf/f3843982-dd30-4c66-6c21-e101c3cb85af

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_raw_interconnection_queue() BinaryIO[source]#
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]#
get_zonal_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 zonal load forecast for a date in 1 hour intervals

class gridstatus.PJM(api_key: str | None = None, retries: int = DEFAULT_RETRIES)[source]#

Bases: gridstatus.base.ISOBase

PJM

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’

FTR_OPTION_PATHS_MONTHLY_URL

https://www.pjm.com/pjmfiles/pub/account/auction-user-info/downloads/option-paths.csv

FTR_SOURCE_SINK_MONTHLY_NON_PROMPT_URL

https://www.pjm.com/pjmfiles/pub/account/auction-user-info/downloads/ftr-source-sink-nonprompt.csv

FTR_SOURCE_SINK_MONTHLY_PROMPT_URL

https://www.pjm.com/pjmfiles/pub/account/auction-user-info/downloads/ftr-source-sink-prompt.csv

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

get_actual_and_scheduled_interchange_summary(...)

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_forecasted_generation_outages(date[, end, verbose])

Retrieves the forecasted generation outages for the next 90 days from:

get_ftr_option_paths_monthly(→ pandas.DataFrame)

Gets the monthly FTR option paths data from PJM.

get_ftr_source_sink_monthly_non_prompt(→ pandas.DataFrame)

Gets the monthly FTR source/sink data for non-prompt months from PJM.

get_ftr_source_sink_monthly_prompt(→ pandas.DataFrame)

Gets the monthly FTR source/sink data for the prompt month from PJM.

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)

get_interface_flows_and_limits_day_ahead(...)

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)

Returns LMP at a previous date.

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:

get_transfer_interface_information_5_min(...)

Retrieves the transfer interface information from:

get_transmission_constraints_day_ahead_hourly(...)

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.

get_weight_average_aggregation_definition(...)

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_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_ftr_option_paths_monthly(date: str | pandas.Timestamp = 'latest', end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#

Gets the monthly FTR option paths data from PJM.

Contains valid source-sink pairs for FTR options in PJM monthly auctions. Only date="latest" is supported.

Source: https://www.pjm.com/pjmfiles/pub/account/auction-user-info/downloads/option-paths.csv

Parameters:
  • date (str) – Only “latest” is supported. Defaults to “latest”.

  • end – Not supported. Defaults to None.

  • verbose (bool, optional) – print verbose output. Defaults to False.

Returns:

DataFrame with columns: Publish Date, Source Node,

Source PNODE ID, Sink Node, Sink PNODE ID

Return type:

pd.DataFrame

get_ftr_source_sink_monthly_non_prompt(date: str | pandas.Timestamp = 'latest', end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#

Gets the monthly FTR source/sink data for non-prompt months from PJM.

Contains valid source/sinks for obligations in the non-prompt month FTR auction. Only date="latest" is supported.

Source: https://www.pjm.com/pjmfiles/pub/account/auction-user-info/downloads/ftr-source-sink-nonprompt.csv

Parameters:
  • date (str) – Only “latest” is supported. Defaults to “latest”.

  • end – Not supported. Defaults to None.

  • verbose (bool, optional) – print verbose output. Defaults to False.

Returns:

DataFrame with columns: Publish Date, Obligation Name,

PNODE ID

Return type:

pd.DataFrame

get_ftr_source_sink_monthly_prompt(date: str | pandas.Timestamp = 'latest', end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#

Gets the monthly FTR source/sink data for the prompt month from PJM.

Contains valid source/sinks for obligations in the prompt month FTR auction. Only date="latest" is supported.

Source: https://www.pjm.com/pjmfiles/pub/account/auction-user-info/downloads/ftr-source-sink-prompt.csv

Parameters:
  • date (str) – Only “latest” is supported. Defaults to “latest”.

  • end – Not supported. Defaults to None.

  • verbose (bool, optional) – print verbose output. Defaults to False.

Returns:

DataFrame with columns: Publish Date, Obligation Name,

PNODE ID

Return type:

pd.DataFrame

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. When requesting “latest”, data from 5 months ago (first of the month) is returned.

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_interconnection_queue(verbose: bool = False) pandas.DataFrame[source]#
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]#

Returns LMP at a previous date.

Note

If start date is prior to the PJM archive date, all data must be downloaded before location filtering can be performed due to limitations of PJM API. The archive date is 186 days (~6 months) before today for the 5 minute real time market and 731 days (~2 years) before today for the Hourly Real Time and Day Ahead Hourly markets. Node type filter can be performed for Real Time Hourly and Day Ahead Hourly markets.

If location_type is provided, it is filtered after data is retrieved for Real Time 5 Minute market regardless of the date. This is due to PJM api limitations.

Returns Location Id, Location Name, Location Short Name.

Parameters:
  • date – Date to get LMPs for.

  • end – End date to get LMPs for.

  • market – Supported Markets: REAL_TIME_5_MIN, REAL_TIME_HOURLY, DAY_AHEAD_HOURLY.

  • locations – List of pnodeid to get LMPs for. Defaults to “hubs”. Use get_pnode_ids() to get a list of possible pnode ids. If “all”, will return data from all p nodes (warning: there are over 10,000 unique pnodes, so expect millions of rows!).

  • location_type – If specified, will only return data for nodes of this type. Defaults to None. Possible location types are: ‘ZONE’, ‘LOAD’, ‘GEN’, ‘AGGREGATE’, ‘INTERFACE’, ‘EXT’, ‘HUB’, ‘EHV’, ‘TIE’, ‘RESIDUAL_METERED_EDC’.

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:

https://dataminer2.pjm.com/feed/hrl_load_metered/definition

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_pnode_ids() pandas.DataFrame[source]#
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_raw_interconnection_queue(verbose: bool = False) BinaryIO[source]#
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

to_local_datetime(df: pandas.DataFrame, column_name: str) pandas.Series[source]#
class gridstatus.SPP[source]#

Bases: gridstatus.base.ISOBase

Southwest 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_binding_constraints_day_ahead_hourly(...)

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_capacity_of_generation_on_outage_annual(...)

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 fuel mix

get_hourly_load(→ pandas.DataFrame)

Get Hourly Load

get_hourly_load_annual(→ pandas.DataFrame)

Get Hourly Load for a year. Starting 2011.

get_interconnection_queue(→ pandas.DataFrame)

Get interconnection queue

get_lmp_day_ahead_hourly(→ pandas.DataFrame)

Get day ahead hourly LMP data

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 load for last 24hrs in 5 minute intervals

get_load_forecast(→ pandas.DataFrame)

Returns load forecast for next 7 days in hourly intervals

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)

get_solar_and_wind_forecast_mid_term(...)

Returns solar and wind generation forecast for +7 days in hourly intervals.

get_solar_and_wind_forecast_short_term(...)

Returns solar and wind generation forecast for +4 hours in 5 minute intervals.

get_ver_curtailments(→ pandas.DataFrame)

Get VER Curtailments

get_ver_curtailments_annual(→ pandas.DataFrame)

Get VER Curtailments for a year. Starting 2014.

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], detailed: bool = False, verbose: bool = False) pandas.DataFrame[source]#

Get fuel mix

Parameters:
  • date – supports today and latest

  • detailed – if True, breaks out self scheduled and market scheduled

Note

if today, returns last 2 hours of data. maybe include previous day

Returns:

fuel mix

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

Supports recent data. For historical annual data use get_hourly_load_annual

Parameters:
  • date – start date

  • end – end date

Returns:

Hourly 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_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:
  • Hub

  • Interface

  • ALL

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, verbose: bool = False) pandas.DataFrame[source]#

Returns load for last 24hrs in 5 minute intervals

get_load_forecast(date: str | pandas.Timestamp, forecast_type: str = 'MID_TERM', verbose: bool = False) pandas.DataFrame[source]#

Returns load forecast for next 7 days in hourly intervals

Parameters:

forecast_type (str) – MID_TERM is hourly for next 7 days or SHORT_TERM is every five minutes for a few hours

Returns:

forecast for current day

Return type:

pd.DataFrame

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_raw_interconnection_queue(verbose: bool = False) BinaryIO[source]#
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

Supports recent data. For historical annual data use get_ver_curtailments_annual

Parameters:
  • date – start date

  • end – end date

get_ver_curtailments_annual(year: int, verbose: bool = True) pandas.DataFrame[source]#

Get VER Curtailments for a year. Starting 2014. Recent data use get_ver_curtailments

Parameters:
  • year – year to get data for

  • verbose – print url

Returns:

VER Curtailments

Return type:

pd.DataFrame

static now()[source]#