🏆 Highlights
- Polars plugins (#10924)
⚠️ Deprecations
- Rename
is_first/last
tois_first/last_distinct
(#11130) - Rename
count_match
tocount_matches
(#11028) - Rename
strip
tostrip_chars
(#10813) - Add
datetime_range
expression function (#10213)
🚀 Performance improvements
- optimize
_unpack_schema()
(#11080) - optimize
polars.utils._post_apply_columns()
(#11086) - optimize
polars.utils._post_apply_columns()
(#11041) - optimize
_unpack_schema()
(#10960) - improve performance of fast projection (#10945)
✨ Enhancements
- Expressify str.split argument. (#11117)
- Polars plugins (#10924)
- better async_collect (#10912)
- Expressify argument of binary contains (#11091)
- dt.offset_by supports broadcasting lhs (#11095)
- Expressify argument of binary starts_with and ends_with (#11076)
- add OpenOffice spreadsheet support via new
pl.read_ods
function (#11011) - json_extract supports extract static and string value to list dtype (#11057)
- add quote_style="never" option for
write_csv
(#11015) - Add
literal
for str count_match (#10996) - More dtypes supports cast to list (#11025)
- Add
strip_prefix
andstrip_suffix
to the string namespace (#10958) - improve
read_excel
table data identification (#10953) - Add
from_dataframe
fast path and improve typing (#10979) - add
openpyxl
as a new/optional engine forread_excel
(#6183) - Add
datetime_range
expression function (#10213)
🐞 Bug fixes
- Correct hash and fmt for struct expr (#11119)
- enforce sortedness of by argument in rolling_* functions (#11002)
- Make
Series.__getitem__
raise an IndexError (#11061) - Filter on empty objectChunked should not throw error (#11073)
- ensure null_count statistics accounts for null array (#11070)
- toggle off cse if ext_context is used (#11051)
- Correct field dtype of string concat (#11055)
- fix partial schema init with
read_dicts
and reduce latency of small-frame creation (#11047) - pushed-down expr should be considered when evaluating ExternalContext (#11023)
- fix rolling_* functions when "by" has nanosecond resolution (#11005)
- Don't reuse member for Selector::Add (#11026)
- ensure
series_equal
properly accounts for dtypes when strict=True (#11012) - fix the construction of List<Null> (#10969)
- write_excel "hidden_columns" parameter fails when taking a selector (#10987)
- allow singular null in regex pattern (#10948)
- compute length of null array in explode (#10946)
🛠️ Other improvements
- remove low contrast coloring from visited links (#11133)
- Ignore matplotlib warning (#11129)
- Do not run user guide examples by default (#11128)
- Ignore matplotlib mypy warnings (#11126)
- Add deprecation message in groupby docs (#11121)
- Removed duplicated example (#11109)
- Add CODEOWNERS for docs folder (#11107)
- Refactor starts_with and ends_with for string (#11085)
- Integrate user guide (#11089)
- remove mentions of the deprecated random module (#11087)
- simplify
SchemaDefinition
type alias (#11077) - put
fetch
explanation in a "notes" block to better highlight it in the docs (#11058) - remove feature gate join/groupby in polars-core (#10965)
- Add Documentation issue type (#11042)
- warn that "by" argument must be sorted for results to be correct in rolling_* functions (#11013)
- Adds missing method refs in LazyDataFrame API docs (#11027)
- Add lint for boolean trap (#11010)
- Add private LazyFrame method for setting sink optimizations (#10988)
- Enable a few more ruff lints (#10998)
- document polars string duration language in temporal range functions (#10978)
- Additional tests for interchange
get_data_buffer
(#10966) - genericize PolarsDataType (#10952)
- Document that filter, drop_nulls, left join preserve order (#10955)
- add note about adbc flight sql driver (#10949)
- Revert
pydantic >= 2.0.0
requirement (#10944) - note that pl.duration represents fixed durations, point to offset_by for non-fixed (#10927)
- Test S3 functionality using moto server (#10164)
Thank you to all our contributors for making this release possible!
@I8dNLo, @KacpiW, @MarcoGorelli, @Object905, @Qqwy, @TNieuwdorp, @alexander-beedie, @antoniocali, @bvanelli, @cjackal, @henrikig, @jakob-keller, @mrogowski11, @nameexhaustion, @orlp, @reswqa, @ritchie46, @s-banach, @stinodego, @svaningelgem and @thomasjpfan