Description
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