Skip to content

Python Polars 0.18.1

Compare
Choose a tag to compare
@github-actions github-actions released this 07 Jun 18:08
· 3320 commits to refs/heads/main since this release
c2505e8

🏆 Highlights

  • add dedicated selectors module, consolidating/expanding existing selector capabilities (#9204)

🚀 Performance improvements

  • slightly improve n_unique performance (#9286)
  • use ciborium in Expression pickling (#9235)

✨ Enhancements

  • add join cardinality validation (#9278)
  • implement set operations for selector API (#9276)
  • keep sorted flag after Expr::truncate (#9275)
  • add "sql_expr" function (#9248)
  • rewrite correlation functions to expression architecture (#9258)
  • keep sorted flag on offset_by (#9253)
  • add expression json serde (#9236)
  • add intersection primitive for selector API (#9240)
  • building blocks for expression expansion sets (#9231)
  • Add ddof option to rolling_var and rolling_std (#8957)
  • immediately flatten nested unions (#9220)
  • Allow empty select/with_columns/groupby (#9205)
  • add a datetime selector (#9212)
  • support float expression on integers (#9210)
  • add dedicated selectors module, consolidating/expanding existing selector capabilities (#9204)
  • add binary to list<u8> cast (#9161)
  • groupby_dynamic by quarter. (#6842)
  • add arr.unique expression (#9159)
  • implement explode for DataType::Array (#9157)
  • Decimal type: sum, min, max aggregations in select and agg context. (#9135)
  • Decimal arithmetic (#9123)
  • support decimals as cast types in csv parser (#9121)
  • Improve error handling for repeat (#9117)

🐞 Bug fixes

  • fix pyarrow dataset literal filter (#9274)
  • raise on invalid sort_by (#9262)
  • match missing Array and Struct classes in FromPyObject (#9271)
  • correct ne/e_missing schema (#9257)
  • fix cached reproject offsets (#9254)
  • delay opening files in streaming engine (#9251)
  • ensure agg(F(lit)) == lit (#9222)
  • don't SO on concat(expressions) (#9214)
  • df.apply first rechunk (#9211)
  • clip window_size to length in rolling_apply (#9209)
  • raise error on invalid df.apply return (#9207)
  • Handle edge cases of named select input (#9198)
  • rolling_apply window_size == len (#9181)
  • respect time zone in strptime/to_datetime when exact=False (#9171)
  • make null chunking behavior equal to other dtypes (#9176)
  • return single numpy array in Array dtype -> numpy (#9164)
  • fix regression in boolean nulls comparison (#9142)
  • fix struct null_count if fields are null arrays (#9151)
  • Fix DataFrame.to_arrow() for 0x0 dataframes (#9144)
  • categorical construction from null values (#9145)
  • let apply caller determine if length needs to be checked. (#9140)
  • struct is_in should upcast numeric types (#9110)
  • Restore functionality of name arg for date_range (#9107)
  • bubble up dtype when converting from arrow (#9120)

🛠️ Other improvements

  • Fix grammar and add periods in Expr.over docs (#9244)
  • Update linting for py-polars crate (#9242)
  • Deprecate exprs=... input for select/with_columns/agg/struct (#9219)
  • Enable parallelization in Python Windows tests (#9232)
  • Use pytest tmp_path (#9206)
  • Build docs in parallel (#9229)
  • Unify Python docs workflows (#9228)
  • add docstring to __array__ methods (#8055)
  • Update expr parsing util to return PyExpr (#9166)
  • update pyo3 requirement from 0.18 to 0.19 (#9155)
  • clarify how the windows are formed in the rolling_* functions (#9192)
  • stabilise polars importtime check (#9196)
  • fix "to_decimal" docstring (#9197)
  • note that exact=False is a performance footgun (#9186)
  • change decimal inference and argument order (#9133)
  • Cache Rust build on main branch (#9130)
  • Improve df.clear() docs (#8809)
  • Bump maturin to 1.0.1 (#9115)
  • Bump lint dependency versions (#9116)

Thank you to all our contributors for making this release possible!
@DeflateAwning, @MarcoGorelli, @alexander-beedie, @ankane, @avimallu, @bfeif, @dependabot, @dependabot[bot], @jonashaag, @josh, @lorentzenchr, @magarick, @ritchie46, @stinodego, @universalmind303 and @zundertj