question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Converting series of dates to Periods

See original GitHub issue

Code Sample, a copy-pastable example if possible

import pandas as pd

dates = pd.Series(pd.date_range('2014-01-01', '2017-01-01', freq='MS'))

# This fails...
pd.PeriodIndex(dates, freq='M')
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-3-687a0b3d3b9a> in <module>
----> 1 pd.PeriodIndex(dates, freq='M')

~/git/pandas/pandas/core/indexes/period.py in __new__(cls, data, ordinal, freq, start, end, periods, tz, dtype, copy, name, **fields)
    221             else:
    222                 # don't pass copy here, since we copy later.
--> 223                 data = period_array(data=data, freq=freq)
    224 
    225         if copy:

~/git/pandas/pandas/core/arrays/period.py in period_array(data, freq, copy)
    920     """
    921     if is_datetime64_dtype(data):
--> 922         return PeriodArray._from_datetime64(data, freq)
    923     if isinstance(data, (ABCPeriodIndex, ABCSeries, PeriodArray)):
    924         return PeriodArray(data, freq)

~/git/pandas/pandas/core/arrays/period.py in _from_datetime64(cls, data, freq, tz)
    234         PeriodArray[freq]
    235         """
--> 236         data, freq = dt64arr_to_periodarr(data, freq, tz)
    237         return cls(data, freq=freq)
    238 

~/git/pandas/pandas/core/arrays/period.py in dt64arr_to_periodarr(data, freq, tz)
    983         elif freq != data.dt.freq:
    984             msg = DIFFERENT_FREQ_INDEX.format(freq.freqstr,
--> 985                                               data.dt.freq.freqstr)
    986             raise IncompatibleFrequency(msg)
    987         data = data._values

AttributeError: 'str' object has no attribute 'freqstr'

# As does this
dates.to_period('M')

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-5-944b687ce2da> in <module>
----> 1 dates.to_period('M')

~/git/pandas/pandas/core/series.py in to_period(self, freq, copy)
   4108             new_values = new_values.copy()
   4109 
-> 4110         new_index = self.index.to_period(freq=freq)
   4111         return self._constructor(new_values,
   4112                                  index=new_index).__finalize__(self)

AttributeError: 'RangeIndex' object has no attribute 'to_period'

Problem description

A pandas series of datetimes can’t be easily converted to PeriodIndexes anymore. These work under older versions of pandas, but fail now on GitHub’s master.

Expected Output

Just don’t fail…

Output of pd.show_versions()

INSTALLED VERSIONS

commit: None python: 3.6.6.final.0 python-bits: 64 OS: Darwin OS-release: 18.0.0 machine: x86_64 processor: i386 byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: en_US.UTF-8

pandas: 0.24.0.dev0+850.g62a15fa40 pytest: 3.9.3 pip: 18.1 setuptools: 40.5.0 Cython: 3.0a0 numpy: 1.16.0.dev0+45718fd scipy: 1.2.0.dev0+016a6ef pyarrow: None xarray: None IPython: 7.1.1 sphinx: None patsy: 0.5.1 dateutil: 2.7.5 pytz: 2018.6 blosc: None bottleneck: None tables: None numexpr: None feather: None matplotlib: None openpyxl: None xlrd: None xlwt: None xlsxwriter: None lxml: None bs4: None html5lib: None sqlalchemy: None pymysql: None psycopg2: None jinja2: 2.10 s3fs: None fastparquet: None pandas_gbq: None pandas_datareader: None gcsfs: None

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Comments:10 (10 by maintainers)

github_iconTop GitHub Comments

1reaction
mroeschkecommented, Nov 1, 2018

Your to_period example doesn’t work for me in 0.23.4 (and don’t think should have ever worked?)

In [6]: pd.__version__
Out[6]: '0.23.4'

In [7]: dates = pd.Series(pd.date_range('2014-01-01', '2017-01-01', freq='MS'))

In [8]: dates.to_period('M')
AttributeError: 'RangeIndex' object has no attribute 'to_period'

# Did you mean this?
In [11]: dates.dt.to_period('M').head()
Out[11]:
0   2014-01
1   2014-02
2   2014-03
3   2014-04
4   2014-05
dtype: object
0reactions
jschendelcommented, Nov 1, 2018

I think pd.PeriodIndex(dates, freq='M') should work; note that pd.PeriodIndex(list(dates), freq='M') works for me on both 0.23.4 and master. I don’t see a reason why it shouldn’t work for a Series if it works for a list.

Read more comments on GitHub >

github_iconTop Results From Across the Web

pandas.Series.dt.to_period — pandas 1.5.2 documentation
When converting a DatetimeArray/Index with non-regular values, so that a frequency cannot be inferred. See also. PeriodIndex. Immutable ndarray holding ordinal ...
Read more >
Pandas: converting date into usable format and counting period
The error comes from the date format you have. You may need to convert your month name to numbers e.g. May --> "05"...
Read more >
Convert Dates to Fiscal Periods in Excel - Easy Formula
Use this easy formula to convert your dates into their fiscal quarters and year. Download the Excel file here: ...
Read more >
5. Time series — Pandas Guide documentation - Read the Docs
A series of time can be generated using 'date_range' command. ... Conversion of string-dates to period is the two step process, i.e. first...
Read more >
How to group yearly data by periods | by Miia Rämö
As there was very little data available per year, the client wanted to group the years into periods. Furthermore, if the year range...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found