from_df fails with std::bad_cast on a reversed DataFrame mixing string and float columns

Offen
#737 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
66/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
pandas, python
Bereich
backend, databases

Rechercherichtung

Start by reading the Python DataFrame registration path used by DuckDBPyConnection.from_df and the replacement scan, then look for tests covering reversed pandas views and mixed column types. Reproduce with the issue's two-column example and compare it with the copied frame. Done when both entry points handle the negative-stride view and a regression test verifies the result.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

What happens?

DuckDBPyConnection.from_df (and a replacement scan of the same frame) fails on a DataFrame that is a negative-stride view, such as df.iloc[::-1], when it mixes a string (object or str) column with a float column. On 2.0.0 the error is std::bad_cast; on 1.3.2 and 1.5.6 it is Unable to cast Python instance of type <class 'int'> to C++ type '?'.

A copy of the same view (df.iloc[::-1].copy()) works, and so does a reversed frame with a single column, or with only string columns.

To Reproduce
import duckdb
import pandas as pd

df = pd.DataFrame({"a": ["x", "y"], "b": [1.0, 2.0]})
duckdb.connect().from_df(df.iloc[::-1]).fetchall()
# duckdb.Error: std::bad_cast

duckdb.connect().from_df(df.iloc[::-1].copy()).fetchall()
# [('y', 2.0), ('x', 1.0)]
DuckDB pandas result
2.0.0 3.1.1 std::bad_cast
2.0.0 2.3.3 std::bad_cast
1.5.6 3.1.1 Unable to cast Python instance of type <class 'int'> to C++ type '?'
1.3.2 2.3.3 Unable to cast Python instance of type <class 'int'> to C++ type '?'
OS:

Linux x86_64 (Pop!_OS, kernel 7.2)

DuckDB Package Version:

2.0.0

Python Version:

3.13.2

Full Name:

Jonas Hörsch

Affiliation:

Open Energy Transition

What is the latest build you tested with?

2.0.0 from PyPI (latest release)

Did you include all relevant data sets for reproducing the issue?

Not applicable: the reproduction creates its own data.

Did you include all code required to reproduce the issue?
  • Yes, I have
Did you include all relevant configuration to reproduce the issue?
  • Yes, I have
Vorherrschende Sprache
Python
Sterne
203
Forks
124
Ø Merge
13 Std. 36 Min.
Gemergte PRs (30 T.)
61

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus duckdb/duckdb-python

Alle Issues in duckdb/duckdb-python

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.