1

我知道如何将函数应用于Pandas-DataFrame中存在的所有列。但是,我还没有想出在使用Polars-DataFrame时如何实现这一点。

我查看了Polars用户指南中专门针对该主题的部分,但我没有找到答案。在这里,我附上了一个代码片段,其中包含我不成功的尝试。

import numpy as np
import polars as pl
import seaborn as sns

# Loading toy dataset as Pandas DataFrame using Seaborn
df_pd = sns.load_dataset('iris')

# Converting Pandas DataFrame to Polars DataFrame
df_pl = pl.DataFrame(df_pd)

# Dropping the non-numeric column...
df_pd = df_pd.drop(columns='species')                     # ... using Pandas
df_pl = df_pl.drop('species')                             # ... using Polars

# Applying function to the whole DataFrame...
df_pd_new = df_pd.apply(np.log2)                          # ... using Pandas
# df_pl_new = df_pl.apply(np.log2)                        # ... using Polars?

# Applying lambda function to the whole DataFrame...
df_pd_new = df_pd.apply(lambda c: np.log2(c))             # ... using Pandas
# df_pl_new = df_pl.apply(lambda c: np.log2(c))           # ... using Polars?

提前感谢您的帮助和时间。

4

1 回答 1

6

您可以使用表达式语法选择所有列,pl.col("*")/pl.all()然后map在列上选择 numpynp.log2(..)函数。

df.select([
    pl.all().map(np.log2)
])

Polars 表达式还支持 numpy 通用函数https://numpy.org/doc/stable/reference/ufuncs.html

这意味着您可以将 polars 表达式传递给 numpy ufunc

df.select([
    np.log2(pl.all())
])

apply请注意,an和 a之间的区别在于,将在每个数值上调用 an,而map在整个. 我们选择这里,因为那样会更快。applymapSeriesmap

于 2021-06-11T09:30:04.077 回答