Я пытаюсь и не могу привести даты к полугодовым периодам. Я не знаю, является ли это ошибкой панд или нет, поэтому я публикую здесь, используя формат проблемы.
Пример кода
import pandas as pd
# Create column, cast to datetime
a = ['2018-04-01', '2018-04-06', '2018-04-10', '2018-04-20', '2018-04-25']
df = pd.DataFrame(a, columns=['a'])
df['a'] = pd.to_datetime(df['a'])
# Attempt to cast to half-month periods
df['a'].dt.to_period('SM')
Создает эту трассировку:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
pandas/_libs/tslibs/frequencies.pyx in pandas._libs.tslibs.frequencies._period_str_to_code()
KeyError: 'SM-15'
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-128-b954dd6bd134> in <module>
----> 1 df['a'].dt.to_period('SM')
~/local/anaconda3/envs/create-database/lib/python3.7/site-packages/pandas/core/accessor.py in f(self, *args, **kwargs)
91 def _create_delegator_method(name):
92 def f(self, *args, **kwargs):
---> 93 return self._delegate_method(name, *args, **kwargs)
94
95 f.__name__ = name
~/local/anaconda3/envs/create-database/lib/python3.7/site-packages/pandas/core/indexes/accessors.py in _delegate_method(self, name, *args, **kwargs)
107
108 method = getattr(values, name)
--> 109 result = method(*args, **kwargs)
110
111 if not is_list_like(result):
~/local/anaconda3/envs/create-database/lib/python3.7/site-packages/pandas/core/accessor.py in f(self, *args, **kwargs)
91 def _create_delegator_method(name):
92 def f(self, *args, **kwargs):
---> 93 return self._delegate_method(name, *args, **kwargs)
94
95 f.__name__ = name
~/local/anaconda3/envs/create-database/lib/python3.7/site-packages/pandas/core/indexes/datetimelike.py in _delegate_method(self, name, *args, **kwargs)
811
812 def _delegate_method(self, name, *args, **kwargs):
--> 813 result = operator.methodcaller(name, *args, **kwargs)(self._data)
814 if name not in self._raw_methods:
815 result = Index(result, name=self.name)
~/local/anaconda3/envs/create-database/lib/python3.7/site-packages/pandas/core/arrays/datetimes.py in to_period(self, freq)
1280 freq = get_period_alias(freq)
1281
-> 1282 return PeriodArray._from_datetime64(self._data, freq, tz=self.tz)
1283
1284 def to_perioddelta(self, freq):
~/local/anaconda3/envs/create-database/lib/python3.7/site-packages/pandas/core/arrays/period.py in _from_datetime64(cls, data, freq, tz)
273 PeriodArray[freq]
274 """
--> 275 data, freq = dt64arr_to_periodarr(data, freq, tz)
276 return cls(data, freq=freq)
277
~/local/anaconda3/envs/create-database/lib/python3.7/site-packages/pandas/core/arrays/period.py in dt64arr_to_periodarr(data, freq, tz)
914 data = data._values
915
--> 916 base, mult = libfrequencies.get_freq_code(freq)
917 return libperiod.dt64arr_to_periodarr(data.view("i8"), base, tz), freq
918
pandas/_libs/tslibs/frequencies.pyx in pandas._libs.tslibs.frequencies.get_freq_code()
pandas/_libs/tslibs/frequencies.pyx in pandas._libs.tslibs.frequencies.get_freq_code()
pandas/_libs/tslibs/frequencies.pyx in pandas._libs.tslibs.frequencies.get_freq_code()
pandas/_libs/tslibs/frequencies.pyx in pandas._libs.tslibs.frequencies._period_str_to_code()
ValueError: Invalid frequency: SM-15
Описание проблемы
Я пытаюсь привести даты к полугодовым периодам. документы для pandas.Series.dt.to_period
говорят, что передают одну из смещенных строк , из которых SM
является одной.
Он действительно говорит, что ValueError
повышается при «преобразовании DatetimeArray / Index с нерегулярными значениями, так что частота не может быть выведена». Но я не понимаю, что это значит, и я не нашел ничего в StackOverflow или системе отслеживания проблем панд, объясняющих эту ошибку.
Ожидаемый вывод
Ожидаемый
df['a'].dt.to_period('SM')
дать:
0 2018-04-15
1 2018-04-15
2 2018-04-15
3 2018-04-30
4 2018-04-30
Name: a, dtype: period[SM-15]
Выход
pd.show_versions()
INSTALLED VERSIONS
------------------
commit : None
python : 3.7.3.final.0
python-bits : 64
OS : Darwin
OS-release : 19.2.0
machine : x86_64
processor : i386
byteorder : little
LC_ALL : None
LANG : en_US.UTF-8
LOCALE : en_US.UTF-8
pandas : 0.25.3
numpy : 1.17.3
pytz : 2019.3
dateutil : 2.8.1
pip : 19.3.1
setuptools : 41.6.0.post20191101
Cython : None
pytest : 5.3.1
hypothesis : 4.50.8
sphinx : None
blosc : None
feather : None
xlsxwriter : None
lxml.etree : 4.4.1
html5lib : None
pymysql : None
psycopg2 : None
jinja2 : 2.10.3
IPython : 7.9.0
pandas_datareader: None
bs4 : 4.8.1
bottleneck : None
fastparquet : None
gcsfs : None
lxml.etree : 4.4.1
matplotlib : 3.1.2
numexpr : None
odfpy : None
openpyxl : None
pandas_gbq : None
pyarrow : 0.15.1
pytables : None
s3fs : None
scipy : 1.3.2
sqlalchemy : None
tables : None
xarray : None
xlrd : 1.2.0
xlwt : None
xlsxwriter : None