You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars中如何将字符串列表列转换为字符串并实现哈希处理?

Polars中如何将字符串列表列转换为字符串并实现哈希处理?

我来帮你搞定这个Polars里哈希字符串列表列的问题~

你遇到的报错是因为Polars的hash方法目前不支持直接对List(String)类型的列进行哈希操作,不过我们有两种纯Polars的解决方案,完全不需要依赖Pandas:

方法一:将列表列转为字符串后哈希

我们可以用Polars数组方法arr.to_string()把每个列表序列化为字符串,之后就能正常调用hash方法了,效果和你用Pandas转字符串的方式一致:

import polars as pl

list_of_lists = [
    ['base', 'base.current base', 'base.current base.inventories - total', 'ABCD'],
    ['base', 'base.current base', 'base.current base.inventories - total', 'ABCD'],
    ['base', 'base.current base', 'base.current base.inventories - total', 'ABCD'],
    ['base', 'base.current base', 'base.current base.inventories - total', 'ABCD']
]

pl_df = pl.DataFrame({'lol': list_of_lists})

result = pl_df.with_columns(
    pl.col('lol')
    .arr.to_string()  # 将每个列表转为格式化的字符串
    .hash(seed=140)
    .name.suffix('_hashed')
)

print(result)

执行后会生成和你Pandas方案一致的哈希值,每个相同的列表都会得到相同的哈希结果。

方法二:转为分类类型(Categorical)哈希

如果你的列里存在混合类型(比如同时有列表、字符串、数字),或者想要更好的性能,推荐把列转为Categorical类型后再哈希。这种方式会给每个唯一的元素分配专属编码,哈希编码后的值稳定性更高:

import polars as pl

list_of_lists = [
    ['base', 'base.current base', 'base.current base.inventories - total', 'ABCD'],
    ['base', 'base.current base', 'base.current base.inventories - total', 'DEFG'],
    ['base', 'base.current base', 'base.current base.inventories - total', 'ABCD'],
    ['base', 'base.current base', 'base.current base.inventories - total', 'HIJK'],
    '(bobbyJoe460)',
    'bobby, Joe (xx866e)',
    137642039575
]

# 用strict=False允许列内存在混合类型
pl_df = pl.DataFrame({'lol': list_of_lists}, strict=False)

result = pl_df.with_columns(
    pl.col('lol')
    .cast(pl.Categorical)  # 转换为分类类型
    .hash(seed=140)
    .name.suffix('_hashed')
)

print(result)

这种方法不仅能处理混合类型场景,重复值较多时的性能表现也会优于字符串转换的方式。

备注:内容来源于stack exchange,提问作者MikeB2019x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:29:30