Skip to content

feat(dataframe): Interop/Export – CSV, Arrow, Feather (PR3)#53

Merged
lepy merged 1 commit into
masterfrom
feat/dataframe-interop
Jun 26, 2026
Merged

feat(dataframe): Interop/Export – CSV, Arrow, Feather (PR3)#53
lepy merged 1 commit into
masterfrom
feat/dataframe-interop

Conversation

@lepy

@lepy lepy commented Jun 26, 2026

Copy link
Copy Markdown
Owner

Dritter von vier PRs zur Verbesserung von sdata/sclass/dataframe.pyInterop/Export. Strikt additiv (load-bearing API unverändert), lokale CI grün, 100 % Coverage.

Neu

  • to_csv(path/filename/sidecar, **kwargs) / from_csv(filepath, **kwargs) — reines pandas, keine neue Dependency. CSV trägt nur Daten; die qualifizierenden Metadaten reisen im optionalen <sname>.meta.jsonld-Sidecar. Index standardmäßig weggelassen (per index=True überschreibbar).
  • to_arrow()pyarrow.Table mit sdata-Metadaten (metadata/column_metadata/description als JSON unter dem b"_sdata"-Schema-Key, neben pandas' eigenen Metadaten); from_arrow(table) stellt sie wieder her.
  • to_feather(path/filename/sidecar, **kwargs) / from_feather(filepath) — Arrow-IPC über pyarrow.feather; schreibt die to_arrow()-Table (Metadaten bleiben erhalten); ohne path → Bytes.

Optional-Dependency

  • CSV ist immer verfügbar. Arrow/Feather sind über _require_parquet("pyarrow") geschützt → klare ImportError-Meldung mit Hinweis pip install sdata[parquet].

Tests

  • Neu: tests/test_sclass_dataframe_interop.py — CSV-Round-Trip (String + Datei + Sidecar + filename-only-Zweig + FileNotFoundError); Arrow/Feather via importorskip("pyarrow"), Metadaten im Arrow-Schema, Annotationen (unit/description) über den Round-Trip erhalten.

Lokale CI grün (ci/local-ci.sh); dataframe.py und Projekt-Total = 100 % (496 passed, 9 optionale Skips).

…Frame

Zusätzliche Austauschformate, strikt additiv, 100 % Coverage. CSV ist immer
verfügbar (reines pandas), Arrow/Feather sind pyarrow-guarded (Extra [parquet]).

- to_csv(path/filename/sidecar, **kwargs) / from_csv(filepath, **kwargs): reines
  pandas, keine neue Dependency. CSV trägt nur Daten; die qualifizierenden
  Metadaten reisen im optionalen <sname>.meta.jsonld-Sidecar. Index standardmäßig
  weggelassen (per index=True überschreibbar).
- to_arrow() -> pyarrow.Table mit sdata-Metadaten (metadata/column_metadata/
  description als JSON unter dem b"_sdata"-Schema-Key, neben pandas' Metadaten);
  from_arrow(table) stellt sie wieder her.
- to_feather(path/filename/sidecar, **kwargs) / from_feather(filepath): Arrow-IPC
  über pyarrow.feather; schreibt die to_arrow()-Table (Metadaten bleiben erhalten),
  ohne path -> Bytes.
- Klare ImportError-Meldung ohne pyarrow (wiederverwendet _require_parquet).
- Tests: tests/test_sclass_dataframe_interop.py (CSV-Round-Trip + Sidecar +
  filename-only-Zweig + FileNotFoundError; Arrow/Feather via importorskip,
  Metadaten im Arrow-Schema, Annotationen über Round-Trip erhalten).
@lepy lepy merged commit b2fe318 into master Jun 26, 2026
1 check passed
@lepy lepy deleted the feat/dataframe-interop branch June 26, 2026 11:48
@codacy-production

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 14 high · 9 minor

Alerts:
⚠ 23 issues (≤ 0 issues of at least minor severity)

Results:
23 new issues

Category Results
Documentation 9 minor
Security 14 high

View in Codacy

🟢 Metrics 37 complexity · 0 duplication

Metric Results
Complexity 37
Duplication 0

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant