`pl.from_numpy` and `series.to_numpy` are your friend here. For 1D columns, we often can be zero copy as well.
Besides that we support numpy ufuncs for `Series` and `Expressions`. As OP pointed out:
https://kevinheavey.github.io/modern-polars/performance.html...
Numpy can be used to speed up some functions by utilizing numpy ufuncs. Numpy drops the GIL and therefore they can still be executed in parallel.
The problem is that it's a huge pile of hacks, exceptions, anti patterns, and regressions.
The API is inconsistent, loose, full of obscure options added as quickfixes.
I found RedFrames [1] recently which wraps Pandas dataframes with a more consistent interface, it's probably what I'd use if I had to write data transformations that had to be compatible with Pandas.
[1] https://dplyr.tidyverse.org/ [2] https://juliadata.github.io/DataFramesMeta.jl/stable/