如何在Polars中实现类似Pandas pd.factorize()的Ordinal encoding?
在Polars中实现与Pandas factorize()等效的序数编码
要在Polars中实现和Pandas pd.factorize() 完全一致的序数编码效果,直接使用Polars内置的 pl.Expr.factorize() 方法即可,它会按值的首次出现顺序生成从0开始的连续整数编码。
实现代码
import polars as pl df = pl.DataFrame({"a": [5, 8, 10], "b": ["hi", "hello", "hi"]}) # 对目标列执行序数编码,替换原列 encoded_df = df.with_columns( pl.col("a").factorize()[0].cast(pl.Int64).alias("a"), pl.col("b").factorize()[0].cast(pl.Int64).alias("b") ) print(encoded_df)
输出结果
┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 0 ┆ 0 │ │ 1 ┆ 1 │ │ 2 ┆ 0 │ └─────┴─────┘
关键说明
factorize()返回一个元组:第一个元素是编码后的列(默认类型为u32,通过.cast(pl.Int64)可转为示例中的i64类型),第二个元素是该列的唯一值集合。- 若需保留原始列,只需修改
alias为新列名,例如.alias("a_encoded")。
内容的提问来源于stack exchange,提问作者nleh
相关产品推荐
相关产品推荐

