Skip to content

Commit

Permalink
Backport PR #56788 on branch 2.2.x (Bug: Interchange protocol impleme…
Browse files Browse the repository at this point in the history
…ntation does not allow for empty string columns) (#56816)

Backport PR #56788: Bug: Interchange protocol implementation does not allow for empty string columns

Co-authored-by: yashb <[email protected]>
  • Loading branch information
meeseeksmachine and roadrollerdafjorst authored Jan 10, 2024
1 parent 922a671 commit e28b401
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 2 deletions.
2 changes: 1 addition & 1 deletion doc/source/whatsnew/v2.2.0.rst
Original file line number Diff line number Diff line change
Expand Up @@ -936,6 +936,7 @@ Other
- Bug in :func:`cut` and :func:`qcut` with ``datetime64`` dtype values with non-nanosecond units incorrectly returning nanosecond-unit bins (:issue:`56101`)
- Bug in :func:`cut` incorrectly allowing cutting of timezone-aware datetimes with timezone-naive bins (:issue:`54964`)
- Bug in :func:`infer_freq` and :meth:`DatetimeIndex.inferred_freq` with weekly frequencies and non-nanosecond resolutions (:issue:`55609`)
- Bug in :func:`pd.api.interchange.from_dataframe` where it raised ``NotImplementedError`` when handling empty string columns (:issue:`56703`)
- Bug in :meth:`DataFrame.apply` where passing ``raw=True`` ignored ``args`` passed to the applied function (:issue:`55009`)
- Bug in :meth:`DataFrame.from_dict` which would always sort the rows of the created :class:`DataFrame`. (:issue:`55683`)
- Bug in :meth:`DataFrame.sort_index` when passing ``axis="columns"`` and ``ignore_index=True`` raising a ``ValueError`` (:issue:`56478`)
Expand All @@ -944,7 +945,6 @@ Other
- Bug in the error message when assigning an empty :class:`DataFrame` to a column (:issue:`55956`)
- Bug when time-like strings were being cast to :class:`ArrowDtype` with ``pyarrow.time64`` type (:issue:`56463`)


.. ---------------------------------------------------------------------------
.. _whatsnew_220.contributors:

Expand Down
2 changes: 1 addition & 1 deletion pandas/core/interchange/column.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ def dtype(self) -> tuple[DtypeKind, int, str, str]:
Endianness.NATIVE,
)
elif is_string_dtype(dtype):
if infer_dtype(self._col) == "string":
if infer_dtype(self._col) in ("string", "empty"):
return (
DtypeKind.STRING,
8,
Expand Down
8 changes: 8 additions & 0 deletions pandas/tests/interchange/test_impl.py
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,14 @@ def test_interchange_from_corrected_buffer_dtypes(monkeypatch) -> None:
pd.api.interchange.from_dataframe(df)


def test_empty_string_column():
# https://github.com/pandas-dev/pandas/issues/56703
df = pd.DataFrame({"a": []}, dtype=str)
df2 = df.__dataframe__()
result = pd.api.interchange.from_dataframe(df2)
tm.assert_frame_equal(df, result)


def test_large_string():
# GH#56702
pytest.importorskip("pyarrow")
Expand Down

0 comments on commit e28b401

Please sign in to comment.