Skip to content

Handling of timezone-aware pandas dataframes/series #33

@pyRobShrk

Description

@pyRobShrk
  • pyhecdss version: 1.1.4 and 1.4
  • Python version: 3.7.7 and 3.11.8
  • Operating System: Windows

Description

Trying to download USGS data using dataretrieval, and subsequently write it to DSS.

What I Tried

from dataretrieval import nwis
import pyhecdss
df, meta = nwis.get_iv('11455495', '2021-06-01', parameterCd='00095')
ts = df['00095_lower-4 ft from bed'].tz_convert('America/Los_Angeles').tz_localize(None)
with pyhecdss.DSSFile('usgs.dss', create_new=True) as f:
    f.write_its('/A/B/EC//IR-MONTH/USGS/', ts, 'mmhos','INST-VAL')

Notes

The above code fails silently - no error just a blank dss file. The silent error is caused by trying to write more than one value with the same timestamp (tz_convert includes daylight savings). If you try to write the data in UTC, pandas throws an error from line 710 of pyhecdss.py: TypeError: Timestamp subtraction must have the same timezones or no timezones.

End-user fix

df.set_index(df.index.tz_localize(None) - pd.Timedelta('8h'), inplace=True)

Possible Improvements

  • In write_its, an error should be thrown for duplicate timestamps. Check that len(df.index) == len(df.index.unique()) before trying to write to dss.
  • Add support for writing timezone-aware pandas data to DSS with timezone attributes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions