panel icon indicating copy to clipboard operation
panel copied to clipboard

Tabulator: error when editing a table that contains a column with dtype `datetime64[ns, UTC]`

Open maximlt opened this issue 1 year ago • 0 comments

When a DataFrame contains a column with dtype datetime64[ns, UTC], editing a value in the DataFrame through the Tabulator widget raises an Exception.

import pandas as pd
import numpy as np
import panel as pn
pn.extension('tabulator')

data = {'datetime_utc': pd.date_range(start='2024-01-01', end='2024-01-05', freq='D')}
df = pd.DataFrame(data)
# Convert the dtype of the datetime column to datetime64[ns, UTC]
df['datetime_utc'] = df['datetime_utc'].dt.tz_localize('UTC')
df["test"] = ""
table = pn.widgets.Tabulator(df)
table.servable()

Traceback:

Traceback (most recent call last):
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/pyviz_comms/__init__.py", line 340, in _handle_msg
    self._on_msg(msg)
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/panel/viewable.py", line 479, in _on_msg
    doc.unhold()
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/bokeh/document/document.py", line 776, in unhold
    self.callbacks.unhold()
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/bokeh/document/callbacks.py", line 431, in unhold
    self.trigger_on_change(event)
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/bokeh/document/callbacks.py", line 408, in trigger_on_change
    invoke_with_curdoc(doc, event.callback_invoker)
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/bokeh/document/callbacks.py", line 443, in invoke_with_curdoc
    return f()
           ^^^
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/bokeh/util/callback_manager.py", line 185, in invoke
    callback(attr, old, new)
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/panel/reactive.py", line 470, in _comm_change
    state._handle_exception(e)
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/panel/io/state.py", line 458, in _handle_exception
    raise exception
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/panel/reactive.py", line 468, in _comm_change
    self._schedule_change(doc, comm)
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/panel/reactive.py", line 450, in _schedule_change
    self._change_event(doc)
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/panel/reactive.py", line 446, in _change_event
    self._process_events(events)
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/panel/reactive.py", line 1306, in _process_events
    self._process_data(events.pop('data'))
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/panel/widgets/tables.py", line 1338, in _process_data
    return super()._process_data(data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/panel/reactive.py", line 1264, in _process_data
    values = self._convert_column(
             ^^^^^^^^^^^^^^^^^^^^^
  File "/home/liquetm/miniconda3/envs/dev/lib/python3.11/site-packages/panel/reactive.py", line 1222, in _convert_column
    converted = np.where(NATs, np.nan, values * 10e5).astype(dtype)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: Cannot interpret 'datetime64[ns, UTC]' as a data type

maximlt avatar Apr 04 '24 14:04 maximlt