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

Dask升级后str.findall返回字符串类型而非object类型异常

Dask 2023.7.1中str.findall返回字符串而非列表的问题

问题现象

升级到Dask 2023.7.1版本后,调用ds.str.findall(regex)得到的Dask Series元素是字符串格式的列表(如"['some', 'sentence']"),而非预期的列表对象。调用compute()后,元素类型为str,不是预期的list。

复现代码

import pandas as pd
import dask.dataframe as dd

s = pd.Series(['some sentence 1', 'some other sentence 2', 'some other sentence 3', 'some other sentence 4'])
ds = dd.from_pandas(s, npartitions=2)
pattern = r'\b[a-zA-Z]+\b'
ds2 = ds.str.findall(pattern)
ps = ds2.compute()
print(type(ps[0]))  # 预期:<class 'list'>,实际:<class 'str'>

解决办法

1. 手动转换类型

使用ast.literal_eval将字符串格式的列表转为实际列表对象,可在Dask计算前后处理:

import ast

# 计算后转换
ps_fixed = ps.apply(ast.literal_eval)

# Dask阶段转换(保留分区计算特性)
ds_fixed = ds2.apply(ast.literal_eval, meta=object)
ps_fixed = ds_fixed.compute()

2. 回退Dask版本

如果不需要新版本的特性,回退到之前无此问题的版本:

pip install dask==2023.6.0 --force-reinstall

问题原因

这是Dask 2023.7.1版本中str.findall方法的已知bug,方法内部错误地将正则匹配得到的列表序列化为了字符串,未保留原列表类型。后续版本大概率会修复该问题,可关注版本更新。

内容的提问来源于stack exchange,提问作者jaroslav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:35:03