Skip to content

Duration/timedelta not supported by dataframe interchange protocol? #329

Closed
@MarcoGorelli

Description

@MarcoGorelli

Looks like timedeltas are currently not supported by the dataframe interchange protocol:

In [1]: pd.api.interchange.from_dataframe(pl.DataFrame({'a': [timedelta(1)]}))
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
Cell In[1], line 1
----> 1 pd.api.interchange.from_dataframe(pl.DataFrame({'a': [timedelta(1)]}))

File ~/tmp/.venv/lib/python3.10/site-packages/pandas/core/interchange/from_dataframe.py:71, in from_dataframe(df, allow_copy)
     68 if not hasattr(df, "__dataframe__"):
     69     raise ValueError("`df` does not support __dataframe__")
---> 71 return _from_dataframe(
     72     df.__dataframe__(allow_copy=allow_copy), allow_copy=allow_copy
     73 )

File ~/tmp/.venv/lib/python3.10/site-packages/pandas/core/interchange/from_dataframe.py:94, in _from_dataframe(df, allow_copy)
     92 pandas_dfs = []
     93 for chunk in df.get_chunks():
---> 94     pandas_df = protocol_df_chunk_to_pandas(chunk)
     95     pandas_dfs.append(pandas_df)
     97 if not allow_copy and len(pandas_dfs) > 1:

File ~/tmp/.venv/lib/python3.10/site-packages/pandas/core/interchange/from_dataframe.py:150, in protocol_df_chunk_to_pandas(df)
    148     columns[name], buf = string_column_to_ndarray(col)
    149 elif dtype == DtypeKind.DATETIME:
--> 150     columns[name], buf = datetime_column_to_ndarray(col)
    151 else:
    152     raise NotImplementedError(f"Data type {dtype} not handled yet")

File ~/tmp/.venv/lib/python3.10/site-packages/pandas/core/interchange/from_dataframe.py:395, in datetime_column_to_ndarray(col)
    381 # Consider dtype being `uint` to get number of units passed since the 01.01.1970
    383 data = buffer_to_ndarray(
    384     dbuf,
    385     (
   (...)
    392     length=col.size(),
    393 )
--> 395 data = parse_datetime_format_str(format_str, data)  # type: ignore[assignment]
    396 data = set_nulls(data, col, buffers["validity"])
    397 return data, buffers

File ~/tmp/.venv/lib/python3.10/site-packages/pandas/core/interchange/from_dataframe.py:360, in parse_datetime_format_str(format_str, data)
    357         raise NotImplementedError(f"Date unit is not supported: {unit}")
    358     return data
--> 360 raise NotImplementedError(f"DateTime kind is not supported: {format_str}")

NotImplementedError: DateTime kind is not supported: tDu

Should they be?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions