Home > Software design >  How can I set the frequency of a pandas index?
How can I set the frequency of a pandas index?

Time:03-04

So this is my code basically:

df = pd.read_csv('XBT_60.csv', index_col = 'date', parse_dates = True)
df.index.freq = 'H'

I load a csv, set the index to the date column and want to set the frequency to 'H'. But this raises this error:

ValueError: Inferred frequency None from passed values does not conform to passed frequency H

The format of the dates column is: 2017-01-01 00:00:00

I already tried loading the csv without setting the index column and used pd.to_datetime on the dates column before I set it as index, but still i am unable to set the frequency. How can I solve this?

BTW: my aim is to use the seasonal_decompose() method from statsmodels, so I need the frequency there.

CodePudding user response:

You can't set frequency if you have missing index values:

>>> df
            val
2019-09-15    0
2019-09-16    1
2019-09-18    3

>>> df.index.freq = 'D'
...
ValueError: Inferred frequency None from passed values does not conform to passed frequency D

To find missing index, use:

>>> df = df.resample('D').first()
            val
2019-09-15  0.0
2019-09-16  1.0
2019-09-17  NaN
2019-09-18  3.0

>>> df.index.freq
<Day>

To debug, find missing indexes:

>>> pd.date_range(df.index.min(), df.index.max(), freq='D').difference(df.index)
DatetimeIndex(['2019-09-17'], dtype='datetime64[ns]', freq=None)
  • Related