Skip to content

Releases: narwhals-dev/narwhals

Narwhals v1.26.0

10 Feb 12:15
Compare
Choose a tag to compare

Changes

  • ci: validate tpch query results (#1971)
  • ci: add pointblank in downstream test (#1956)
  • ci: add Validoopsie to downstream tests (#1973)
  • chore(typing): fix _from_compliant_dataframe type ignore (#1969)
  • fix(typing): resolve remaining utils.py warnings (#1968)
  • test: Add new_streaming (#1898)
  • fix(typing): add missing Series._level annotation (#1967)
  • ci: fix plotly tests location (#1965)

✨ Enhancements

  • feat: Series.hist (#1859)
  • feat: catch Polars exceptions, unify exception raising more (#1918)
  • feat: improving array casting (#1865)
  • feat: add datetime selector (#1822)
  • feat: add Schema.to_(arrow|pandas|polars) (#1924)

🐞 Bug fixes

  • fix: implement casting to Int128 (#1984)
  • fix: fix type __get_item__ (#1958)
  • fix(typing): Backport from_native overload fixes to v1 (#1953)
  • fix(typing): Backport use IntoDataFrameT in to_native to v1 (#1954)

📖 Documentation

  • docs: add Schema.to_(arrow|pandas|polars) (#1980)
  • RFC, chore: shrink series module docstrings (#1976)
  • chore: shrink functions module docstrings (#1974)
  • docs: add docstring guidelines to CONTRIBUTING.md (#1957)

🛠️ Other improvements

  • chore: minor series.py fixes, dedupe a little (#1982)
  • chore(typing): resolve _arrow.dataframe warnings (#1983)
  • chore(typing): add np.ndarray aliases (#1977)
  • chore: widen parse_version to accept packages (#1975)
  • RFC, chore: shrink series module docstrings (#1976)
  • chore: shrink functions module docstrings (#1974)
  • chore(typing): fix remaining functions, series warnings (#1970)
  • fix: missing __getitem__ type fixes (#1963)
  • chore(typing): add guards is_compliant_* (+ friends) (#1955)
  • chore: reduce duplication, implement more methods at the Narwhals level rather than at the compliant level, fix CI from Ibis release (#1960)

Thank you to all our contributors for making this release possible!
@EdAbati, @FBruzzesi, @IsaiasGutierrezCruz, @MarcoGorelli, @akmalsoliev, @camriddell, @dangotbanned and @luke396

Narwhals v1.25.2

06 Feb 10:55
Compare
Choose a tag to compare

Changes

✨ Enhancements

  • feat: restore support of is_duplicated for pyarrow (#1951)

🐞 Bug fixes

  • fix: cuDF to_numpy tests were failing (#1949)
  • fix: raise NotImplementedError for DataFramte.is_duplicated for PyArrow when there is more than one column (#1948)
  • fix: wrong argument name suggested in from_dict deprecation (#1946)

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

Narwhals v1.25.1

05 Feb 09:29
Compare
Choose a tag to compare

Changes

🚀 Performance improvements

  • perf: use fastpath in DataFrame.to_numpy for pandas, improve performance for DataFrame.schema for pandas, use fewer values to sniff dtype for pandas objects (#1929)

✨ Enhancements

  • enh: Deprecate native_namespace in favour of backend in from_dict (#1931)
  • feat: validate duplicate column names in pyarrow and duckdb (#1815)

🐞 Bug fixes

  • fix: Always collect Iterator[IntoExpr] in utils.flatten (#1934)

📖 Documentation

  • docs: Make DataFrame and LazyFrame docstrings shorter and more concise (#1939)
  • chore: fix a couple of typos 🙃 (#1921)

🛠️ Other improvements

  • ci: fix plotly downstream test (#1938)
  • fix(typing): Use IntoDataFrameT in to_native (#1936)
  • fix(typing): Use correct TypeVar/Union pairs in from_native (#1935)
  • fix(typing): Ensure LazyFrame has a unique TypeVar (#1930)
  • refactor: refactoring following refurb and perflint suggestions (#1925)

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

Narwhals v1.25.0

03 Feb 11:08
Compare
Choose a tag to compare

Changes

✨ Enhancements

  • feat: add LazyFrame.explode for duckdb (#1891)
  • feat: add duckdb .str.to_datetime (#1916)
  • feat: enable ModuleType and str for backend in .lazy() method (#1914)
  • feat: add LazyFrame.unpivot for spark and duckdb (#1890)
  • feat: LazyFrame.collect with backend and **kwargs (#1734)
  • feat: spark date and datetimedata types, allow for dtype in nw.lit for pyspark (#1913)

📖 Documentation

  • docs: Minor rendering fixups, inherit all exceptions from NarwhalsError (#1919)
  • docs: shorten docstring examples in narwhals/expr.py (#1915)

🛠️ Other improvements

  • chore: simplify duckdb group-by (#1911)

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

Narwhals v1.24.2

01 Feb 13:57
Compare
Choose a tag to compare

Changes

✨ Enhancements

  • feat: Add backend argument to lazy (#1895)
  • feat: add dtype.is_<x> methods (#1906)
  • feat: spark like .list namespace and lazyframe .explode (#1887)

🐞 Bug fixes

  • fix: pandas was raising when index name and column names overlapped in groupby (#1908)
  • docs: update selectors docstrings (#1905)

📖 Documentation

  • docs: improve search in docs (#1909)
  • docs: update selectors docstrings (#1905)
  • docs(ecosystem.md): add pointblank to Used By section (#1904)
  • docs(README.md): add mention of pointblank project (#1903)

Thank you to all our contributors for making this release possible!
@DeaMariaLeon, @FBruzzesi, @MarcoGorelli, @raisadz and @rich-iannone

Narwhals v1.24.1

28 Jan 19:06
Compare
Choose a tag to compare

Changes

  • chore: fix pyspark/sqlframe typo (#1884)

✨ Enhancements

  • feat: start (silently) adding support for SQLFrame (#1883)
  • feat: move robust literal handling for PySpark (#1880)
  • feat: add selectors.matches (#1882)
  • feat: support more scalar operations for duckdb, Increase width for ipython (#1877)

🛠️ Other improvements

  • chore: add "typing :: typed" classifier to pyproject.toml (#1881)
  • chore: use positional-only arg in evaluate_into_exprs (#1879)
  • chore: remove unused _depth from DuckDBExpr and SparkLikeExpr (#1878)
  • chore: refactor name namespaces to lower code duplication (#1876)

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

Narwhals v1.24.0

27 Jan 09:59
Compare
Choose a tag to compare

Changes

  • docs: fix api completness generation in CI (#1863)

✨ Enhancements

  • feat: pyspark and duckdb selectors (#1853)
  • feat: completely refactor alias tracking and support nw.all, nw.nth, and selectors across the API (#1866)
  • feat: raise if expression changes length in .over() (#1867)
  • feat: add DuckDB join_asof (#1860)
  • feat: allow any ddof value for duckdb var and std (#1858)
  • feat: add DuckDB Struct dtype (#1851)
  • feat: add DuckDB list.len method (#1850)
  • feat: enforce that group-by aggregations actually aggregate (#1844)
  • feat: add mean_horizontal for DuckDB (#1846)

🐞 Bug fixes

  • fix: support various reductions in pyspark (#1870)
  • fix: address & / | operator errors for PySpark / chore: use F.lit in maybe_evaluate for pyspark, like we do for duckdb (#1872)
  • fix: allow any name in expression parsing (#1871)
  • fix: nw.selectors.by_dtype(nw.Datetime) was excluding tz-aware for Polars (#1869)
  • patch: fix duckdb narwhals_to_native_dtype for Int32 and UInt32 (#1857)
  • fix: raise on selectors addition (#1854)
  • fix: rename ewm and rolling min_periods to min_samples for polars 1.21 compatibility (#1864)
  • fix: address & / | operator errors for PySpark / chore: use F.lit in maybe_evaluate for pyspark, like we do for duckdb (#1872)

🛠️ Other improvements

  • test: skip Ibis tests if deps aren't installed, set defaults in PandasLikeSeries.__array__ to fix cuDF is_in (#1862)
  • chore: parse strings as columns names at narwhals-level (#1856)
  • chore: some typing and default removal (#1852)
  • chore: validate expressions shape at narwhals/expr.py level (#1845)
  • chore: simplify internal renaming in _pandas_like/series.py (#1847)

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

Narwhals v1.23.0

20 Jan 14:43
Compare
Choose a tag to compare

Changes

  • ci: downstream test for formulaic (#1817)
  • docs: Removed class, added polars to the table, str.head and str.tail are a… (#1801)

✨ Enhancements

  • feat: deprecate maintain_order in Expr.unique and LazyFrame.tail (but keep around in stable.v1) (#1839)
  • feat: track whether expressions change length but don't aggregate, and only allow length-changing expressions if they're followed by aggregations in the lazy API (#1828)
  • feat: add DuckDB: nw.nth, nw.sum_horizontal, nw.concat_str, group_by with drop_null_keys (#1832)
  • feat: remove eager_or_interchange from from_native in main namespace, switch Ibis' support from interchange to lazy in main namespace (but preserve status-quo in stable.v1) (#1829)
  • feat: add is_nan and is_finite for duckdb, is_nan for pyspark (#1825)
  • chore: rename time zone tests (#1830)
  • feat: Deprecate Expr.arg_true (but keep Series.arg_true, and keep both available in stable.v1) (#1827)
  • feat: add Expr.dt methods to PySpark (#1835)
  • feat: add pyspark str namespace to_datetime (#1826)
  • feat: add total duration methods for DuckDB (#1831)
  • feat: add .over method for SparkLikeExpr (#1808)
  • feat: pyspark group by n_unique and no aggregation (#1819)
  • feat: Disallow order-dependent expressions from being passed to nw.LazyFrame (#1806)
  • feat: add SparkExpr.cast for basic types (#1812)
  • feat: pyspark and duckdb Expr.name namespace (#1809)
  • feat: add AnonymousExprError (#1816)
  • feat: deprecate Expr.head, Expr.tail, Expr.sort, Expr.gather_every, Expr.sample (but keep them in stable.v1) (#1791)
  • feat: add duckdb dataframe drop_nulls (#1811)
  • feat: add DataFrame and Series to_polars (#1803)
  • feat: add support for SparkLikeNamespace.when (#1805)

🐞 Bug fixes

  • fix: when/then/otherwise output name was not consistent across backends (#1833)
  • fix: raise on shape mismatch in filter (#1814)
  • patch: fix when-then double lit case (#1810)

🛠️ Other improvements

  • chore: simplify imports (#1838)
  • test: fixup test suite for cudf.pandas (#1837)
  • test: decouple pyspark constructor from pandas (#1834)
  • chore: refactor pandas-like narwhals_to_native_dtype (#1824)
  • chore: refactor isinstance_or_issubclass to allow tuples (#1820)

Thank you to all our contributors for making this release possible!
@Dhanunjaya-Elluri, @EdAbati, @FBruzzesi, @MarcoGorelli, @luke396, @marvinl803 and @raisadz

Narwhals v1.22.0

13 Jan 12:11
Compare
Choose a tag to compare

Changes

✨ Enhancements

  • feat: improve error message on check_columns_exist (#1799)
  • feat: DuckDB date (#1798)
  • feat: DuckDB dt.to_string (#1794)
  • feat: DuckDB dt.ordinal_day (#1796)
  • feat: DuckDB dt.weekday (#1795)
  • feat: add extra overload for concat for when it is not known statically whether inputs are eager or lazy (#1783)
  • feat: duckdb replace_all with regex (#1784)
  • feat: implement anti-join, str.len_chars, and null_count for DuckDB (#1777)
  • feat: SparkLikeNamespace methods (#1779)
  • feat: add SparkLikeStrNamespace methods (#1781)
  • feat: add all, any and null_count Spark Expressions (#1724)
  • feat: add missing dunder methods in SparkLikeExpr and SparkLikeNamespace.lit (#1708)
  • feat: implement cross-join for duckdb (#1773)
  • feat: semi-join for duckdb (#1767)
  • feat: implement n_unique for DuckDB (#1762)
  • feat: implement when/then/otherwise for DuckDB (#1759)
  • feat: add few missing SparkLikeExpr methods (#1721)

🐞 Bug fixes

  • fix: to_py_scalar was raising for decimals (#1800)
  • fix: fix skew for duckdb with fewer than 3 elements (#1785)
  • fix: duckdb join was failing if column names contained spaces (#1775)
  • fix: parse_version was not parsing duckdb pre-preleases correctly (#1763)
  • fix: update Spark min version in utils.py (#1760)

📖 Documentation

  • docs: remove docstring examples from narwhals/stable/v1 (#1797)
  • docs: Restore API complentess page (#1788)
  • docs: Increased width for content (#1769)
  • docs: fix is_between type hint in signature (#1766)

🛠️ Other improvements

  • chore: factor out check_columns_exist (#1792)
  • chore: split namespaces out from expr and series (#1782)
  • chore: move pyspark tests into main test suite (#1761)
  • chore: dask nightly (#1768)
  • chore: Remove some unnecessary trailing commas (#1757)
  • chore: validate predicates in nw.when one level higher (#1756)
  • chore: remove some expr._kwargs defaults (#1747)
  • chore: Filter left join warning (#1753)

Thank you to all our contributors for making this release possible!
@DeaMariaLeon, @Dhanunjaya-Elluri, @EdAbati, @FBruzzesi, @MarcoGorelli, @camriddell, @lucas-nelson-uiuc, @marvinl803 and @raisadz

Narwhals v1.21.1

07 Jan 11:45
Compare
Choose a tag to compare

Changes

✨ Enhancements

  • feat: add Series|Expr.rank (#1342)

🐞 Bug fixes

  • fix: fix license classifier (#1751)

📖 Documentation

  • docs: update api-completeness with duckdb (#1740)

🛠️ Other improvements

  • test: remove cudf from tests/expr_and_series/replace_time_zone_test.py::test_replace_time_zone_none[cudf] (#1748)
  • chore: filter old pyarrow/pandas warnings we cant do anything about (#1746)
  • [pre-commit.ci] pre-commit autoupdate (#1741)

Thank you to all our contributors for making this release possible!
@AlessandroMiola, @Dhanunjaya-Elluri, @EdAbati, @FBruzzesi, @MarcoGorelli, @anopsy