Skip to content

Releases: narwhals-dev/narwhals

Narwhals v2.13.0

01 Dec 13:55

Choose a tag to compare

Changes

✨ Enhancements

  • feat: Enable ArrowExpr.over with null's in multiple columns (#3316)

🐞 Bug fixes

  • fix: pandas-like & dask join's with null values in keys (#3318)
  • fix(typing): Overhaul @overloads in nw.from_native (#3125)
  • fix: align behaviour for df[:, boolean_selector] (#3330)
  • fix: return tuple of python objects from ArrowDataFrame.row (#3334)
  • fix(typing): Avoid false positives on nw.__getattr__ (#3333)

📖 Documentation

  • docs: Add Support section to README (#3320)
  • doc: fix incorrect narwhals daft url (#3321)

🛠️ Other improvements

  • test: skip pandas only if in constructor (#3328)
  • ci: Remove extra runs on merge (#3337)
  • test: Un-xfail test_over_cum_reverse for pandas[nullable] v3.0+ (#3326)
  • chore: Fix show_version typo, add PR top level description section (#3324)

Thank you to all our contributors for making this release possible!
@FBruzzesi, @MarcoGorelli, @dangotbanned, @m-richards and @raisadz

Narwhals v2.12.0

17 Nov 10:55

Choose a tag to compare

Changes

✨ Enhancements

  • enh: Make public narwhals.compliant.py (#3302)

🐞 Bug fixes

  • fix: Fix over with partition_by when partition_by contains null values (#3308)
  • fix: pandas/pyarrow were returning incorrect results for when/then … (#3312)

📖 Documentation

  • enh: Make public narwhals.compliant.py (#3302)

Thank you to all our contributors for making this release possible!
@MarcoGorelli

Narwhals v2.11.0

10 Nov 16:30

Choose a tag to compare

Changes

✨ Enhancements

  • feat: Add Expr.replace_strict support for lazy backends if default is provided (#3282)
  • enh: Show more informative not_implemented and "could not translate" errors for plugins (#3297)
  • feat: Add default in {Expr,Series}.replace_strict (#3276)

🐞 Bug fixes

  • fix: with_row_index was returning incorrect results when used with order_by for pandas, pyarrow, and polars (#3292)
  • fix: Make is_finite consistent for Polars < 1.18 (#3288)
  • feat: Add default in {Expr,Series}.replace_strict (#3276)
  • fix: Pass/Retrieve empty categories from nw.Enum (#3284)

📖 Documentation

  • docs: document Daft support (#3299)

🛠️ Other improvements

  • chore: simplify dask implementation for direct translations (#3287)
  • chore: document closed interval options (#3291)
  • test: xfail polars cat.get_categories (flaky) (#3283)

Thank you to all our contributors for making this release possible!
@FBruzzesi, @MarcoGorelli, @camriddell and @liamholmes31

Narwhals v2.10.2

04 Nov 16:37

Choose a tag to compare

Changes

  • test: un-xfail is_finite for sqlframe (#3268)

✨ Enhancements

  • enh: rewrite duckdb groupby so it avoids group-by-all (#3267)

🐞 Bug fixes

  • fix when/then/otherwise for empty frame (#3280)
  • fix: coalesce was raising with multi-output expression (#3278)

Thank you to all our contributors for making this release possible!
@MarcoGorelli, @dangotbanned, @dependabot[bot] and dependabot[bot]

Narwhals v2.10.1

31 Oct 17:09

Choose a tag to compare

Changes

✨ Enhancements

  • fix: allow for None dtype in from_dict (#3252)
  • [Enh] added modifications to make tests accessible to plugins (#3248)

🐞 Bug fixes

  • fix: Ibis failing with IntegerColumn and .is_finite (#3258)
  • fix: allow for None dtype in from_dict (#3252)
  • fix: Address pandas.Series.to_frame for unnamed series in internal usage (#3251)

🛠️ Other improvements

  • chore: Duckdb pre-release compat (#3263)
  • chore: Add DTypeClass to improve DType.__repr__ and simplify __slots__ (#3213)
  • ci: Add typos-cli in pre-commit (#3260)
  • tests: Allow to run polars without extra deps (#3256)
  • fix(test): TPCH find_spec('dask') and find_spec('dask.dataframe') (#3253)
  • test: Refactor TPCH testing to run without all dependencies installed (#3244)

Thank you to all our contributors for making this release possible!
@FBruzzesi, @MarcoGorelli, @hoxbro and @ym-pett

Narwhals v2.10.0

27 Oct 17:56

Choose a tag to compare

Changes

🚀 Performance improvements

  • perf: Rewrite with_row_index so it's faster for pandas/pyarrow and doesn't use rank (#3239)

✨ Enhancements

  • feat: introduce (experimental) plugin system (#2978)
  • feat: Support over expressions more freely, make expressions printable, rewrite internals (travelling pr 🌴 ) (#3152)

🐞 Bug fixes

  • fix: align nw.nth expansion with nw.col during group_by (#3243)
  • fix: Align str.to_titlecase with polars v1.35.0 behavior (#3238)

🛠️ Other improvements

  • ci: Add Fairlearn to downstream tests and ecosystem page (#3228)
  • chore: fix ci (cuDF fixes, coverage) (#3245)
  • feat: Support over expressions more freely, make expressions printable, rewrite internals (travelling pr 🌴 ) (#3152)
  • chore: Simplify spark-like and ibis concat_str (#3240)
  • ci: Make it a bit greener (#3241)
  • chore: Share std and var implementations for sql backends (#3229)

Thank you to all our contributors for making this release possible!
@FBruzzesi, @MarcoGorelli and @ym-pett

Narwhals v2.9.0

20 Oct 12:20

Choose a tag to compare

Changes

✨ Enhancements

  • feat: Add support for {Expr,Series}.{ceil,floor} (#3198)
  • feat: Add assert_series_equal (#2983)

🐞 Bug fixes

  • fix: Allow pyarrow extension dtypes (mapped to nw.Unknown) (#3223)
  • fix(dependencies): update import check for modin.pandas module (#3219)

📖 Documentation

  • refactor(typing): Add _native.py (#3086)

🛠️ Other improvements

  • refactor(typing): Add _native.py (#3086)
  • ci: test pi-thon (#3218)
  • chore: fixup ci (#3217)
  • chore: add flake8-typing-imports (#3203)
  • ci: Unpin DuckDB version (#3211)
  • test: Add serde tests for DTypes (#3205)

Thank you to all our contributors for making this release possible!
@FBruzzesi, @MarcoGorelli, @dangotbanned, @m-richards and @sfc-gh-eferguson

Narwhals v2.8.0

13 Oct 08:45

Choose a tag to compare

Changes

🚀 Performance improvements

  • perf: Add __slots__ to all DTypes (#3194)
  • perf: avoid full broadcast in horizontal functions (#3199)
  • fix: correctly preserve arrow dtypes for pandas-like, improve concat_str performance (#3193)
  • perf: Prefer Iterator > tuple > list, use native pyarrow.repeat, simplify nw.concat_str for DuckDB backend (#3190)

✨ Enhancements

  • feat: Add support for {Expr,Series}.str.to_titlecase (#3116)

🐞 Bug fixes

  • fix: correctly preserve arrow dtypes for pandas-like, improve concat_str performance (#3193)
  • fix: BaseFrame.filter with list[bool] in predicates (#3183)

🛠️ Other improvements

  • chore: Add script to automatically sort members in api-reference (#3200)
  • ci: Unpin (some) dependencies (#3186)
  • chore: pandas-nightly and duckdb-nightly fixes (#3158)
  • [pre-commit.ci] pre-commit autoupdate (#3181)

Thank you to all our contributors for making this release possible!
@FBruzzesi, @MarcoGorelli, @dangotbanned, @pre-commit-ci[bot] and pre-commit-ci[bot]

Narwhals v2.7.0

06 Oct 09:40

Choose a tag to compare

Changes

✨ Enhancements

  • enh: Add nw.format (#3169)
  • feat: Adds {Expr,Series}.{first,last} (#2528)
  • feat: Support polars.UInt128 (#3138)
  • feat: Add prefix argument to generate_temporary_column_name (#3147)
  • feat: Add {nw,DataFrame}.from_dicts (#3148)

🐞 Bug fixes

  • fix: raise for rank followed by over with order_by for sql-like backends (#3178)
  • chore: Make Implementation.UNKNOWN._backend_version() safe (#3133)

📖 Documentation

  • docs(python) remove now unnecessary returns statements (#3170)

🛠️ Other improvements

  • chore: Add CompliantNamespace.is_native (#3130)
  • chore: Make Implementation.UNKNOWN._backend_version() safe (#3133)
  • chore(typing): Ignore another EagerDataFrame intermittent [False Negative] (#3142)
  • ci: fix darts job (#3172)
  • fix: add --upgrade flag to uv sync --dev (#3175)

Thank you to all our contributors for making this release possible!
@FBruzzesi, @MarcoGorelli, @akmalsoliev, @dangotbanned, @dependabot[bot], @felixgwilliams and dependabot[bot]

Narwhals v2.6.0

29 Sep 09:10

Choose a tag to compare

Changes

✨ Enhancements

  • enh: support skew with over (#3161)
  • fix: Align division by zero behavior across all backends (#2761)
  • enh: support n_unique with over across all backends (#3159)
  • enh: support non-elementwise (but length-preserving) keys in group-by (#3157)

🐞 Bug fixes

  • fix: preserve nulls in cumulative functions (#3156)

🛠️ Other improvements

  • chore(typing): pyright ignore pl.UInt128 (#3144)
  • ci: ban click 8.3.0 (#3146)
  • chore: Support @requires.backend_version in namespaces (#3127)
  • ci: Temporary pin duckdb for ibis (#3136)
  • test: fix version_test failing on old venv (#3134)
  • test(typing): fix pickle_test using Sequence (#3135)
  • refactor: Simplify maybe_convert_dtypes (#3141)
  • chore: Add CompliantFrame._with_native (#3140)
  • refactor(typing): Remove now-unused isinstance_or_issubclass overloads (#3139)
  • chore: Upgrade ruff to v0.13.0 and fix related issues in tests/ (#3126)
  • tests: more modern polars tests (#3087)

Thank you to all our contributors for making this release possible!
@FBruzzesi, @MarcoGorelli, @dangotbanned and @skritsotalakis