Skip to content

Datetime series cannot subtract numpy.datetime64 #12830

@pganssle

Description

@pganssle

For some reason, it's not possible to subtract a numpy.datetime64 object from a Series, even though subtracting a datetime.datetime object is possible. I found this bug when trying to work around issue #8554.

Code Sample, a copy-pastable example if possible

import pandas as pd
import numpy as np
from datetime import datetime

EPOCH = datetime(1970, 1, 1)
EPOCH64 = np.datetime64(EPOCH)

df = pd.DataFrame(pd.date_range('2014-11-19', '2014-11-21', freq='D'))

epoch_ts = df[0] - EPOCH                                       # Works
epoch_tsnp = pd.Series(df[0].values - EPOCH64, name=0)         # Works
epoch_ts64 = df[0] - EPOCH64                                   # TypeError

Expected Output

epoch_ts and epoch_tsnp are both:

0   16393 days
1   16394 days
2   16395 days
Name: 0, dtype: timedelta64[ns]

There is a TypeError raised when epoch_ts64 is calculated. A full stack trace follows:

~/anaconda3/lib/python3.5/site-packages/pandas/core/ops.py in wrapper(left, right, name, na_op)
    605 
    606         time_converted = _TimeOp.maybe_convert_for_time_op(left, right, name,
--> 607                                                            na_op)
    608 
    609         if time_converted is None:

~/anaconda3/lib/python3.5/site-packages/pandas/core/ops.py in maybe_convert_for_time_op(cls, left, right, name, na_op)
    565             return None
    566 
--> 567         return cls(left, right, name, na_op)
    568 
    569 

~/anaconda3/lib/python3.5/site-packages/pandas/core/ops.py in __init__(self, left, right, name, na_op)
    279 
    280         lvalues = self._convert_to_array(left, name=name)
--> 281         rvalues = self._convert_to_array(right, name=name, other=lvalues)
    282 
    283         self.name = name

~/anaconda3/lib/python3.5/site-packages/pandas/core/ops.py in _convert_to_array(self, values, name, other)
    400             if (supplied_dtype is None and other is not None and
    401                 (other.dtype in ('timedelta64[ns]', 'datetime64[ns]')) and
--> 402                     isnull(values).all()):
    403                 values = np.empty(values.shape, dtype='timedelta64[ns]')
    404                 values[:] = iNaT

~/anaconda3/lib/python3.5/site-packages/pandas/core/common.py in isnull(obj)
    174     pandas.notnull: boolean inverse of pandas.isnull
    175     """
--> 176     return _isnull(obj)
    177 
    178 

~/anaconda3/lib/python3.5/site-packages/pandas/core/common.py in _isnull_new(obj)
    184         raise NotImplementedError("isnull is not defined for MultiIndex")
    185     elif isinstance(obj, (ABCSeries, np.ndarray, pd.Index)):
--> 186         return _isnull_ndarraylike(obj)
    187     elif isinstance(obj, ABCGeneric):
    188         return obj._constructor(obj._data.isnull(func=isnull))

~/anaconda3/lib/python3.5/site-packages/pandas/core/common.py in _isnull_ndarraylike(obj)
    275         result = values.view('i8') == tslib.iNaT
    276     else:
--> 277         result = np.isnan(values)
    278 
    279     # box

TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

output of pd.show_versions()

INSTALLED VERSIONS
------------------
commit: None
python: 3.5.1.final.0
python-bits: 64
OS: Linux
OS-release: 3.19.0-58-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8

pandas: 0.18.0
nose: 1.3.7
pip: 8.1.1
setuptools: 20.2.2
Cython: 0.23.4
numpy: 1.10.4
scipy: 0.17.0
statsmodels: 0.6.1
xarray: None
IPython: 4.0.3
sphinx: 1.3.5
patsy: 0.4.0
dateutil: 2.5.1
pytz: 2016.3
blosc: None
bottleneck: 1.0.0
tables: 3.2.2
numexpr: 2.4.6
matplotlib: 1.5.1
openpyxl: 2.3.2
xlrd: 0.9.4
xlwt: 1.0.0
xlsxwriter: 0.8.4
lxml: 3.5.0
bs4: 4.4.1
html5lib: None
httplib2: None
apiclient: None
sqlalchemy: 1.0.11
pymysql: None
psycopg2: None
jinja2: 2.8
boto: 2.39.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    DatetimeDatetime data dtypeDtype ConversionsUnexpected or buggy dtype conversionsDuplicate ReportDuplicate issue or pull request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions