Skip to content

Assignment of column via .loc #27395

Closed
@danci5

Description

@danci5
# This code is failing
df = pd.DataFrame({'timestamp': [np.datetime64('2017-01-01 01:00:00'), np.datetime64('2017-01-01 02:00:00')],
                   'value': ['a', 'b']})
df.loc[:, 'day'] = df.loc[:, 'timestamp'].values.astype('datetime64[D]')

Error

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-91-7e5c52b6ed28> in <module>()
----> 1 df.loc[:, 'day'] = df.loc[:, 'timestamp'].values.astype('datetime64[D]')

/home/homola/env/venv/local/lib/python2.7/site-packages/pandas/core/indexing.pyc in __setitem__(self, key, value)
    188             key = com.apply_if_callable(key, self.obj)
    189         indexer = self._get_setitem_indexer(key)
--> 190         self._setitem_with_indexer(indexer, value)
    191 
    192     def _validate_key(self, key, axis):

/home/homola/env/venv/local/lib/python2.7/site-packages/pandas/core/indexing.pyc in _setitem_with_indexer(self, indexer, value)
    360 
    361                         # add a new item with the dtype setup
--> 362                         self.obj[key] = _infer_fill_value(value)
    363 
    364                         new_indexer = convert_from_missing_indexer_tuple(

/home/homola/env/venv/local/lib/python2.7/site-packages/pandas/core/frame.pyc in __setitem__(self, key, value)
   3368         else:
   3369             # set column
-> 3370             self._set_item(key, value)
   3371 
   3372     def _setitem_slice(self, key, value):

/home/homola/env/venv/local/lib/python2.7/site-packages/pandas/core/frame.pyc in _set_item(self, key, value)
   3443 
   3444         self._ensure_valid_index(value)
-> 3445         value = self._sanitize_column(key, value)
   3446         NDFrame._set_item(self, key, value)
   3447 

/home/homola/env/venv/local/lib/python2.7/site-packages/pandas/core/frame.pyc in _sanitize_column(self, key, value, broadcast)
   3652             # upcast
   3653             value = cast_scalar_to_array(len(self.index), value)
-> 3654             value = maybe_cast_to_datetime(value, infer_dtype)
   3655 
   3656         # return internal types directly

/home/homola/env/venv/local/lib/python2.7/site-packages/pandas/core/dtypes/cast.pyc in maybe_cast_to_datetime(value, dtype, errors)
    979                 else:
    980                     raise TypeError("cannot convert datetimelike to "
--> 981                                     "dtype [{dtype}]".format(dtype=dtype))
    982             elif is_datetime64tz:
    983 

TypeError: cannot convert datetimelike to dtype [datetime64[D]]
# This code is ok
df = pd.DataFrame({'timestamp': [np.datetime64('2017-01-01 01:00:00'), np.datetime64('2017-01-01 02:00:00')],
                   'value': ['a', 'b']})
df['day'] = df.loc[:, 'timestamp'].values.astype('datetime64[D]')

Problem description

When assigning to a column and using pandas.DataFrame.loc, it fails due to 'TypeError: cannot convert datetimelike to dtype [datetime64[D]]'. When using simple assignment, it doesn't fail.
If it is a bad practice what is done above in the first example, the error message should be different.

Expected Outcome

Assignment is successful for both below.

df.loc[:, 'day'] = df.loc[:, 'timestamp'].values.astype('datetime64[D]')
df['day'] = df.loc[:, 'timestamp'].values.astype('datetime64[D]')

Output of pd.show_versions()

INSTALLED VERSIONS

commit: None
python: 2.7.12.final.0
python-bits: 64
OS: Linux
OS-release: 4.15.0-51-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: en_US.utf8
LANG: en_US.UTF-8
LOCALE: None.None

pandas: 0.24.2
numpy: 1.16.4
...

Metadata

Metadata

Assignees

No one assigned

    Labels

    DatetimeDatetime data dtypeDtype ConversionsUnexpected or buggy dtype conversionsIndexingRelated to indexing on series/frames, not to indexes themselves

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions