Pandas oddity

Table of Contents

What's going on here?

In [91]:
import pandas as pd
In [104]:
from numpy import nan
from pandas import NaT
In [119]:
df = pd.DataFrame({
    'timestamp_utc': {6: Timestamp('2019-10-08 03:40:00+0000', tz='UTC'), 
                      7: Timestamp('2019-10-08 04:40:00+0000', tz='UTC')}, 
})
In [120]:
df
Out[120]:
timestamp_utc
6 2019-10-08 03:40:00+00:00
7 2019-10-08 04:40:00+00:00
In [124]:
df.loc[:, 'hour'] = df['timestamp_utc'].dt.floor(freq='1 H')
df
Out[124]:
timestamp_utc hour
6 2019-10-08 03:40:00+00:00 2019-10-08 03:00:00+00:00
7 2019-10-08 04:40:00+00:00 2019-10-08 04:00:00+00:00
In [125]:
df = pd.DataFrame({
    'timestamp_utc': {6: Timestamp('2019-10-08 03:40:00+0000', tz='UTC')}, 
})
In [126]:
df.loc[:, 'hour'] = df['timestamp_utc'].dt.floor(freq='1 H')
df
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-126-4f1ec8ec51e9> in <module>
----> 1 df.loc[:, 'hour'] = df['timestamp_utc'].dt.floor(freq='1 H')
      2 df

~/covid-19/venv/lib/python3.6/site-packages/pandas/core/indexing.py in __setitem__(self, key, value)
    669             key = com.apply_if_callable(key, self.obj)
    670         indexer = self._get_setitem_indexer(key)
--> 671         self._setitem_with_indexer(indexer, value)
    672 
    673     def _validate_key(self, key, axis: int):

~/covid-19/venv/lib/python3.6/site-packages/pandas/core/indexing.py in _setitem_with_indexer(self, indexer, value)
    848                             indexer, self.obj.axes
    849                         )
--> 850                         self._setitem_with_indexer(new_indexer, value)
    851 
    852                         return self.obj

~/covid-19/venv/lib/python3.6/site-packages/pandas/core/indexing.py in _setitem_with_indexer(self, indexer, value)
   1010                     labels, value, plane_indexer, lplane_indexer, self.obj
   1011                 ):
-> 1012                     setter(labels[0], value)
   1013 
   1014                 # per label values

~/covid-19/venv/lib/python3.6/site-packages/pandas/core/indexing.py in setter(item, v)
    960                     s._consolidate_inplace()
    961                     s = s.copy()
--> 962                     s._data = s._data.setitem(indexer=pi, value=v)
    963                     s._maybe_update_cacher(clear=True)
    964 

~/covid-19/venv/lib/python3.6/site-packages/pandas/core/internals/managers.py in setitem(self, **kwargs)
    559 
    560     def setitem(self, **kwargs):
--> 561         return self.apply("setitem", **kwargs)
    562 
    563     def putmask(self, **kwargs):

~/covid-19/venv/lib/python3.6/site-packages/pandas/core/internals/managers.py in apply(self, f, filter, **kwargs)
    440                 applied = b.apply(f, **kwargs)
    441             else:
--> 442                 applied = getattr(b, f)(**kwargs)
    443             result_blocks = _extend_blocks(applied, result_blocks)
    444 

~/covid-19/venv/lib/python3.6/site-packages/pandas/core/internals/blocks.py in setitem(self, indexer, value)
    856                 if not is_dtype_equal(self.dtype, dtype):
    857                     b = self.astype(dtype)
--> 858                     return b.setitem(indexer, value)
    859 
    860         # value must be storeable at this moment

~/covid-19/venv/lib/python3.6/site-packages/pandas/core/internals/blocks.py in setitem(self, indexer, value)
    906 
    907             try:
--> 908                 values = values.astype(arr_value.dtype)
    909             except ValueError:
    910                 pass

TypeError: data type not understood
In [ ]: