-
-
Notifications
You must be signed in to change notification settings - Fork 18.8k
Closed
Labels
DatetimeDatetime data dtypeDatetime data dtypeDtype ConversionsUnexpected or buggy dtype conversionsUnexpected or buggy dtype conversionsDuplicate ReportDuplicate issue or pull requestDuplicate issue or pull request
Description
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
Labels
DatetimeDatetime data dtypeDatetime data dtypeDtype ConversionsUnexpected or buggy dtype conversionsUnexpected or buggy dtype conversionsDuplicate ReportDuplicate issue or pull requestDuplicate issue or pull request