USGS dataretrieval Python Package get_discharge_peaks()
Examples
This notebook provides examples of using the Python dataretrieval package to retrieve streamflow peak data for United States Geological Survey (USGS) monitoring sites. The dataretrieval package provides a collection of functions to get data from the USGS National Water Information System (NWIS) and other online sources of hydrology and water quality data, including the United States Environmental Protection Agency (USEPA).
Install the Package
Use the following code to install the package if it doesn’t exist already within your Jupyter Python environment.
[1]:
!pip install dataretrieval
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: dataretrieval in /home/runner/.local/lib/python3.10/site-packages (0.1.dev1+g3ba0c83)
Requirement already satisfied: requests in /home/runner/.local/lib/python3.10/site-packages (from dataretrieval) (2.32.3)
Requirement already satisfied: pandas==2.* in /home/runner/.local/lib/python3.10/site-packages (from dataretrieval) (2.2.3)
Requirement already satisfied: numpy>=1.22.4 in /home/runner/.local/lib/python3.10/site-packages (from pandas==2.*->dataretrieval) (2.1.2)
Requirement already satisfied: python-dateutil>=2.8.2 in /home/runner/.local/lib/python3.10/site-packages (from pandas==2.*->dataretrieval) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in /usr/lib/python3/dist-packages (from pandas==2.*->dataretrieval) (2022.1)
Requirement already satisfied: tzdata>=2022.7 in /home/runner/.local/lib/python3.10/site-packages (from pandas==2.*->dataretrieval) (2024.2)
Requirement already satisfied: charset-normalizer<4,>=2 in /home/runner/.local/lib/python3.10/site-packages (from requests->dataretrieval) (3.4.0)
Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests->dataretrieval) (3.3)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/lib/python3/dist-packages (from requests->dataretrieval) (1.26.5)
Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests->dataretrieval) (2020.6.20)
Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.8.2->pandas==2.*->dataretrieval) (1.16.0)
Load the package so you can use it along with other packages used in this notebook.
[2]:
from dataretrieval import nwis
from IPython.display import display
Basic Usage
The dataretrieval package has several functions that allow you to retrieve data from different web services. This examples uses the get_discharge_peaks()
function to retrieve peak streamflow data for a USGS monitoring site from NWIS. The function has the following arguments:
Arguments (Additional parameters, if supplied, will be used as query parameters)
sites (list of strings): A list of USGS site identifiers for which data will be retrieved. If the waterdata parameter site_no is supplied, it will overwrite the sites parameter.
start (string): A beginning date for the period for which data will be retrieved. If the waterdata parameter begin_date is supplied, it will overwrite the start parameter.
end (string): An ending date for the period for which data will be retrieved. If the waterdata parameter end_date is supplied, it will overwrite the end parameter.
Example 1: Retrieve streamflow peak data for two USGS monitoring sites
[3]:
site_ids = ['01594440', '040851325']
peak_data = nwis.get_discharge_peaks(site_ids)
print("Retrieved " + str(len(peak_data[0])) + " data values.")
Retrieved 55 data values.
Interpreting the Result
The result of calling the get_discharge_peaks()
function is an object that contains a Pandas data frame object and an associated metadata object. The Pandas data frame contains the discharge peak values for the requested site(s).
Once you’ve got the data frame, there’s several useful things you can do to explore the data.
Display the data frame as a table.
[4]:
display(peak_data[0])
agency_cd | peak_tm | peak_va | peak_cd | gage_ht | gage_ht_cd | year_last_pk | ag_dt | ag_tm | ag_gage_ht | ag_gage_ht_cd | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
site_no | datetime | |||||||||||
01594440 | 1972-06-22 00:00:00+00:00 | USGS | NaN | 31100 | 5,7 | 27.90 | NaN | NaN | NaN | NaN | NaN | NaN |
1978-01-27 00:00:00+00:00 | USGS | NaN | 10600 | 5 | 18.04 | NaN | NaN | NaN | NaN | NaN | NaN | |
1979-09-07 00:00:00+00:00 | USGS | NaN | 11500 | 5 | 18.52 | NaN | NaN | NaN | NaN | NaN | NaN | |
1979-10-11 00:00:00+00:00 | USGS | NaN | 3940 | 5 | 12.06 | NaN | NaN | NaN | NaN | NaN | NaN | |
1981-02-24 00:00:00+00:00 | USGS | NaN | 1640 | 5 | 9.60 | NaN | NaN | NaN | NaN | NaN | NaN | |
1982-02-04 00:00:00+00:00 | USGS | NaN | 3380 | 5 | 11.53 | NaN | NaN | NaN | NaN | NaN | NaN | |
1983-06-21 00:00:00+00:00 | USGS | NaN | 5750 | 5 | 14.28 | NaN | NaN | NaN | NaN | NaN | NaN | |
1984-03-30 00:00:00+00:00 | USGS | NaN | 4340 | 5 | 12.58 | NaN | NaN | NaN | NaN | NaN | NaN | |
1985-02-13 00:00:00+00:00 | USGS | NaN | 4730 | 5 | 13.07 | NaN | NaN | NaN | NaN | NaN | NaN | |
1986-04-16 00:00:00+00:00 | USGS | NaN | 1520 | 5 | 9.43 | NaN | NaN | NaN | NaN | NaN | NaN | |
1986-12-25 00:00:00+00:00 | USGS | NaN | 4060 | 5 | 12.21 | NaN | NaN | NaN | NaN | NaN | NaN | |
1987-11-30 00:00:00+00:00 | USGS | NaN | 3510 | 5 | 11.65 | NaN | NaN | NaN | NaN | NaN | NaN | |
1989-05-07 00:00:00+00:00 | USGS | NaN | 9190 | 5 | 16.84 | NaN | NaN | NaN | NaN | NaN | NaN | |
1990-05-30 00:00:00+00:00 | USGS | NaN | 3140 | 5 | 11.44 | NaN | NaN | NaN | NaN | NaN | NaN | |
1991-03-24 00:00:00+00:00 | USGS | NaN | 4750 | 5 | 12.95 | NaN | NaN | NaN | NaN | NaN | NaN | |
1992-03-27 00:00:00+00:00 | USGS | NaN | 3200 | 5 | 11.50 | NaN | NaN | NaN | NaN | NaN | NaN | |
1993-03-05 00:00:00+00:00 | USGS | NaN | 5550 | 5 | 13.76 | NaN | NaN | NaN | NaN | NaN | NaN | |
1993-11-29 00:00:00+00:00 | USGS | NaN | 6960 | 5 | 15.05 | NaN | NaN | NaN | NaN | NaN | NaN | |
1995-03-09 00:00:00+00:00 | USGS | NaN | 4100 | 5 | 12.32 | NaN | NaN | NaN | NaN | NaN | NaN | |
1996-01-20 00:00:00+00:00 | USGS | NaN | 8280 | 5 | 16.14 | NaN | NaN | NaN | NaN | NaN | NaN | |
1996-11-09 00:00:00+00:00 | USGS | NaN | 6900 | 5 | 15.00 | NaN | NaN | NaN | NaN | NaN | NaN | |
1998-03-10 00:00:00+00:00 | USGS | NaN | 4840 | 5 | 13.04 | NaN | NaN | NaN | NaN | NaN | NaN | |
1999-09-17 00:00:00+00:00 | USGS | NaN | 8200 | 5 | 16.07 | NaN | NaN | NaN | NaN | NaN | NaN | |
2000-03-22 00:00:00+00:00 | USGS | NaN | 3640 | 5 | 11.90 | NaN | NaN | NaN | NaN | NaN | NaN | |
2001-06-08 00:00:00+00:00 | USGS | 06:30 | 3800 | 5 | 12.05 | NaN | NaN | NaN | NaN | NaN | NaN | |
2002-04-29 00:00:00+00:00 | USGS | NaN | 1510 | 2,5,8 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
2003-02-23 00:00:00+00:00 | USGS | 19:30 | 6990 | 5 | 15.08 | NaN | NaN | NaN | NaN | NaN | NaN | |
2003-12-12 00:00:00+00:00 | USGS | 10:45 | 5790 | 5 | 13.99 | NaN | NaN | NaN | NaN | NaN | NaN | |
2005-04-03 00:00:00+00:00 | USGS | 19:15 | 5210 | 5 | 13.42 | NaN | NaN | NaN | NaN | NaN | NaN | |
2006-06-26 00:00:00+00:00 | USGS | 23:00 | 12700 | 5 | 19.20 | NaN | NaN | NaN | NaN | NaN | NaN | |
2007-04-16 00:00:00+00:00 | USGS | 11:15 | 5520 | 5 | 13.73 | NaN | NaN | NaN | NaN | NaN | NaN | |
2008-05-13 00:00:00+00:00 | USGS | 02:00 | 7860 | 5 | 15.80 | NaN | NaN | NaN | NaN | NaN | NaN | |
2009-06-19 00:00:00+00:00 | USGS | 05:45 | 4130 | 5 | 12.35 | NaN | NaN | NaN | NaN | NaN | NaN | |
2010-03-14 00:00:00+00:00 | USGS | 13:00 | 5780 | 5 | 13.98 | NaN | NaN | NaN | NaN | NaN | NaN | |
2011-09-08 00:00:00+00:00 | USGS | 13:15 | 16800 | 5 | 21.10 | NaN | NaN | NaN | NaN | NaN | NaN | |
2011-12-08 00:00:00+00:00 | USGS | 20:30 | 4900 | 5 | 13.74 | NaN | NaN | NaN | NaN | NaN | NaN | |
2012-10-30 00:00:00+00:00 | USGS | 23:00 | 10800 | 5 | 18.02 | NaN | NaN | NaN | NaN | NaN | NaN | |
2014-05-01 00:00:00+00:00 | USGS | 17:30 | 15600 | 5 | 20.56 | NaN | NaN | NaN | NaN | NaN | NaN | |
2015-06-28 00:00:00+00:00 | USGS | 18:15 | 6610 | 5 | 15.03 | NaN | NaN | NaN | NaN | NaN | NaN | |
2016-08-01 00:00:00+00:00 | USGS | 00:30 | 6140 | 5 | 14.64 | NaN | NaN | NaN | NaN | NaN | NaN | |
2017-07-30 00:00:00+00:00 | USGS | 01:15 | 4960 | 5 | 13.60 | NaN | NaN | NaN | NaN | NaN | NaN | |
2018-06-04 00:00:00+00:00 | USGS | 18:30 | 8360 | 5 | 16.32 | NaN | NaN | NaN | NaN | NaN | NaN | |
2018-12-16 00:00:00+00:00 | USGS | 23:30 | 7220 | 5 | 15.50 | NaN | NaN | NaN | NaN | NaN | NaN | |
2020-04-14 00:00:00+00:00 | USGS | 09:15 | 4340 | 5 | 12.99 | NaN | NaN | NaN | NaN | NaN | NaN | |
2020-11-12 00:00:00+00:00 | USGS | 17:45 | 4000 | 5 | 13.24 | NaN | NaN | NaN | NaN | NaN | NaN | |
2021-10-30 00:00:00+00:00 | USGS | 17:45 | 4590 | 5 | 13.74 | NaN | NaN | NaN | NaN | NaN | NaN | |
2022-12-16 00:00:00+00:00 | USGS | 14:15 | 3330 | 5 | 12.65 | NaN | NaN | NaN | NaN | NaN | NaN | |
040851325 | 2005-08-18 00:00:00+00:00 | USGS | NaN | 267 | NaN | 4.30 | NaN | NaN | NaN | NaN | NaN | NaN |
2006-03-13 00:00:00+00:00 | USGS | NaN | 288 | NaN | 4.37 | 2.0 | NaN | 2006-05-12 | NaN | 4.45 | 1.0 | |
2007-03-14 00:00:00+00:00 | USGS | NaN | 301 | NaN | 4.58 | 2.0 | NaN | 2007-03-12 | NaN | 5.24 | 1.0 | |
2010-03-14 00:00:00+00:00 | USGS | NaN | 386 | NaN | 4.87 | 2.0 | NaN | 2010-03-13 | NaN | 5.22 | 1.0 | |
2011-03-18 00:00:00+00:00 | USGS | NaN | 436 | NaN | 5.02 | NaN | NaN | NaN | NaN | NaN | NaN | |
2012-03-09 00:00:00+00:00 | USGS | NaN | 150 | NaN | 3.89 | 5.0 | NaN | NaN | NaN | NaN | NaN | |
2013-03-31 00:00:00+00:00 | USGS | NaN | 409 | NaN | 4.91 | 2.0 | NaN | 2013-03-13 | NaN | 5.42 | 1.0 | |
2014-06-02 00:00:00+00:00 | USGS | NaN | 429 | NaN | 5.00 | NaN | NaN | NaN | NaN | NaN | NaN |
Show the data types of the columns in the resulting data frame.
[5]:
print(peak_data[0].dtypes)
agency_cd object
peak_tm object
peak_va int64
peak_cd object
gage_ht float64
gage_ht_cd float64
year_last_pk float64
ag_dt object
ag_tm float64
ag_gage_ht float64
ag_gage_ht_cd float64
dtype: object
The other part of the result returned from the get_dv()
function is a metadata object that contains information about the query that was executed to return the data. For example, you can access the URL that was assembled to retrieve the requested data from the USGS web service. The USGS web service responses contain a descriptive header that defines and can be helpful in interpreting the contents of the response.
[6]:
print("The query URL used to retrieve the data from NWIS was: " + peak_data[1].url)
The query URL used to retrieve the data from NWIS was: https://nwis.waterdata.usgs.gov/nwis/peaks?format=rdb&site_no=01594440%2C040851325
The following example is the same as the previous example but with multi index turned off (multi_index=False)
[7]:
site_ids = ['01594440', '040851325']
peak_data = nwis.get_discharge_peaks(site_ids, multi_index=False)
print("Retrieved " + str(len(peak_data[0])) + " data values.")
Retrieved 55 data values.
Additional Examples
Example 2: Retrieve discharge peaks for a single site.
[8]:
stations = "06011000"
data3 = nwis.get_discharge_peaks(stations)
display(data3[0])
agency_cd | site_no | peak_tm | peak_va | peak_cd | gage_ht | gage_ht_cd | year_last_pk | ag_dt | ag_tm | ag_gage_ht | ag_gage_ht_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
datetime | ||||||||||||
1937-04-28 00:00:00+00:00 | USGS | 06011000 | NaN | 964 | NaN | 3.52 | NaN | NaN | NaN | NaN | NaN | NaN |
1938-04-27 00:00:00+00:00 | USGS | 06011000 | NaN | 1030 | NaN | 3.92 | NaN | NaN | NaN | NaN | NaN | NaN |
1939-04-19 00:00:00+00:00 | USGS | 06011000 | NaN | 829 | NaN | 3.56 | NaN | NaN | NaN | NaN | NaN | NaN |
1940-04-14 00:00:00+00:00 | USGS | 06011000 | NaN | 590 | NaN | 3.00 | NaN | NaN | NaN | NaN | NaN | NaN |
1941-04-11 00:00:00+00:00 | USGS | 06011000 | NaN | 430 | NaN | 2.59 | NaN | NaN | NaN | NaN | NaN | NaN |
1942-04-12 00:00:00+00:00 | USGS | 06011000 | NaN | 883 | NaN | 3.67 | NaN | NaN | NaN | NaN | NaN | NaN |
1945-05-04 00:00:00+00:00 | USGS | 06011000 | NaN | 681 | NaN | 3.99 | NaN | NaN | NaN | NaN | NaN | NaN |
1946-04-21 00:00:00+00:00 | USGS | 06011000 | NaN | 961 | NaN | 4.75 | NaN | NaN | NaN | NaN | NaN | NaN |
1947-05-02 00:00:00+00:00 | USGS | 06011000 | NaN | 781 | NaN | 4.28 | NaN | NaN | NaN | NaN | NaN | NaN |
1948-04-30 00:00:00+00:00 | USGS | 06011000 | NaN | 820 | NaN | 4.41 | NaN | NaN | NaN | NaN | NaN | NaN |
1949-04-27 00:00:00+00:00 | USGS | 06011000 | NaN | 726 | NaN | 4.14 | NaN | NaN | NaN | NaN | NaN | NaN |
1950-04-22 00:00:00+00:00 | USGS | 06011000 | NaN | 781 | NaN | 4.30 | NaN | NaN | NaN | NaN | NaN | NaN |
1951-04-23 00:00:00+00:00 | USGS | 06011000 | NaN | 640 | NaN | 3.96 | 2 | NaN | 1951-04-15 | NaN | 4.47 | 1.0 |
1952-04-30 00:00:00+00:00 | USGS | 06011000 | NaN | 1360 | NaN | 5.24 | NaN | NaN | NaN | NaN | NaN | NaN |
1953-05-05 00:00:00+00:00 | USGS | 06011000 | NaN | 715 | NaN | 4.10 | NaN | NaN | NaN | NaN | NaN | NaN |
1954-04-23 00:00:00+00:00 | USGS | 06011000 | NaN | 546 | NaN | 3.54 | 2 | NaN | 1954-04-19 | NaN | 5.41 | NaN |
1956-04-24 00:00:00+00:00 | USGS | 06011000 | NaN | 596 | NaN | 3.77 | NaN | NaN | NaN | NaN | NaN | NaN |
1957-05-06 00:00:00+00:00 | USGS | 06011000 | NaN | 1020 | NaN | 4.77 | NaN | NaN | NaN | NaN | NaN | NaN |
1958-04-30 00:00:00+00:00 | USGS | 06011000 | NaN | 590 | NaN | 3.77 | NaN | NaN | NaN | NaN | NaN | NaN |
1959-04-22 00:00:00+00:00 | USGS | 06011000 | NaN | 352 | NaN | 2.81 | NaN | NaN | NaN | NaN | NaN | NaN |
1960-04-08 00:00:00+00:00 | USGS | 06011000 | NaN | 800 | 1 | NaN | NaN | NaN | 1960-04-08 | 1200.0 | 4.52 | 1.0 |
1961-04-05 00:00:00+00:00 | USGS | 06011000 | NaN | 300 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
1962-04-27 00:00:00+00:00 | USGS | 06011000 | NaN | 900 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
1963-04-20 00:00:00+00:00 | USGS | 06011000 | NaN | 486 | NaN | 3.20 | NaN | NaN | NaN | NaN | NaN | NaN |
1964-04-28 00:00:00+00:00 | USGS | 06011000 | NaN | 751 | NaN | 4.20 | NaN | NaN | NaN | NaN | NaN | NaN |
1965-04-28 00:00:00+00:00 | USGS | 06011000 | NaN | 958 | NaN | 4.66 | NaN | NaN | NaN | NaN | NaN | NaN |
1966-04-16 00:00:00+00:00 | USGS | 06011000 | NaN | 524 | NaN | 3.28 | 2 | NaN | 1966-04-21 | NaN | 3.76 | 1.0 |
1967-05-12 00:00:00+00:00 | USGS | 06011000 | NaN | 604 | NaN | 3.75 | 2 | NaN | 1967-04-27 | NaN | 4.20 | 1.0 |
Example 3: Retrieve peak discharge data for a monitoring site between two dates
[9]:
data4 = nwis.get_discharge_peaks(stations, start='1953-01-01', end='1960-01-01')
display(data4[0])
agency_cd | site_no | peak_tm | peak_va | peak_cd | gage_ht | gage_ht_cd | year_last_pk | ag_dt | ag_tm | ag_gage_ht | ag_gage_ht_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
datetime | ||||||||||||
1953-05-05 00:00:00+00:00 | USGS | 06011000 | NaN | 715 | NaN | 4.10 | NaN | NaN | NaN | NaN | NaN | NaN |
1954-04-23 00:00:00+00:00 | USGS | 06011000 | NaN | 546 | NaN | 3.54 | 2.0 | NaN | 1954-04-19 | NaN | 5.41 | NaN |
1956-04-24 00:00:00+00:00 | USGS | 06011000 | NaN | 596 | NaN | 3.77 | NaN | NaN | NaN | NaN | NaN | NaN |
1957-05-06 00:00:00+00:00 | USGS | 06011000 | NaN | 1020 | NaN | 4.77 | NaN | NaN | NaN | NaN | NaN | NaN |
1958-04-30 00:00:00+00:00 | USGS | 06011000 | NaN | 590 | NaN | 3.77 | NaN | NaN | NaN | NaN | NaN | NaN |
1959-04-22 00:00:00+00:00 | USGS | 06011000 | NaN | 352 | NaN | 2.81 | NaN | NaN | NaN | NaN | NaN | NaN |