BUG: Date offset on numpy datetime64 does not work for week and month offsets
See original GitHub issue-
I have checked that this issue has not already been reported.
-
I have confirmed this bug exists on the latest version of pandas.
-
(optional) I have confirmed this bug exists on the master branch of pandas.
Code Sample
import numpy as np
import pandas as pd
# test data: a numpy Datetime64
ts_np = np.Datetime64('2021-01-01T08:00:00.00')
# 1 hour offset: works as expected (1 day offset also works as expected)
do=pd.tseries.frequencies.to_offset('1h')
ts_np + do
Result
Timestamp('2021-01-01 09:00:00')
# 1 week offset returns an error
do=pd.tseries.frequencies.to_offset('1W')
ts_np + do
Result
ts_np+do
Traceback (most recent call last):
File "<ipython-input-11-e20c02eb9ea8>", line 1, in <module>
ts_np+do
UFuncTypeError: ufunc 'add' cannot use operands with types dtype('<M8[ms]') and dtype('O')
# 1 month begin offset returns an error
do=pd.tseries.frequencies.to_offset('1MS')
Result
ts_np+do
Traceback (most recent call last):
File "<ipython-input-13-e20c02eb9ea8>", line 1, in <module>
ts_np+do
UFuncTypeError: ufunc 'add' cannot use operands with types dtype('<M8[ms]') and dtype('O')
Problem description
Applying week or month offset on numpy Datetime64
does not work.
Output of pd.show_versions()
INSTALLED VERSIONS
commit : 2cb96529396d93b46abab7bbc73a208e708c642e python : 3.8.5.final.0 python-bits : 64 OS : Linux OS-release : 5.8.0-53-generic Version : #60~20.04.1-Ubuntu SMP Thu May 6 09:52:46 UTC 2021 machine : x86_64 processor : x86_64 byteorder : little LC_ALL : None LANG : fr_FR.UTF-8 LOCALE : fr_FR.UTF-8
pandas : 1.2.4 numpy : 1.20.1 pytz : 2021.1 dateutil : 2.8.1 pip : 21.1.1 setuptools : 52.0.0.post20210125 Cython : 0.29.23 pytest : 6.2.3 hypothesis : None sphinx : 4.0.1 blosc : None feather : None xlsxwriter : 1.3.8 lxml.etree : 4.6.3 html5lib : 1.1 pymysql : None psycopg2 : None jinja2 : 3.0.0 IPython : 7.22.0 pandas_datareader: None bs4 : 4.9.3 bottleneck : 1.3.2 fsspec : 0.9.0 fastparquet : 0.6.0 gcsfs : None matplotlib : 3.3.4 numexpr : 2.7.3 odfpy : None openpyxl : 3.0.7 pandas_gbq : None pyarrow : 2.0.0 pyxlsb : None s3fs : None scipy : 1.6.2 sqlalchemy : 1.4.15 tables : 3.6.1 tabulate : None xarray : None xlrd : 2.0.1 xlwt : 1.3.0 numba : 0.51.2
Issue Analytics
- State:
- Created 2 years ago
- Reactions:1
- Comments:6 (5 by maintainers)
do
here is a Week offset withweekday=6
, sots_np + do
is giving you the next date withres.weekday() ==6
. I think you want eitherto_offset("7D")
orpd.offsets.Week(n=1, weekday=None)
A possible workaround to this can be to use the
timedelta64
function of numpy:Output: