Polars中将字符串列表转为List类型:高效方案求助
解决Polars字符串列表转List类型的高效方法
针对你遇到的大数量级字符串形式列表转Polars List类型时map_elements效率低下、直接cast返回null的问题,以下是两种高效的向量化解决方案:
原因说明
直接使用series.cast(pl.List)返回null是因为Polars无法自动解析这种字符串格式的Python列表,需要用专门的字符串处理函数来解析。而map_elements逐元素调用Python函数,在数据量极大时会产生大量性能开销,导致耗时过长。
解决方案1:正则提取+类型转换
利用Polars的str.extract_all向量化函数提取所有浮点数,再转换为List类型:
import polars as pl series1 = pl.Series(["[1.2, 3.4]", "[5.6, 7.8]", "[9.1, 2.3]"]) series2 = pl.Series(["[1.0, 3.0]", "[5.0, 7.0]", "[9.0, 2.0]"]) # 提取所有浮点数并转为List[Float64] parsed_series1 = series1.str.extract_all(r"-?\d+\.\d+").cast(pl.List(pl.Float64)) parsed_series2 = series2.str.extract_all(r"-?\d+\.\d+").cast(pl.List(pl.Float64))
- 正则表达式
-?\d+\.\d+可以匹配正负浮点数,确保所有数值都被提取 - 整个操作是向量化执行,性能远高于逐元素的
map_elements
解决方案2:JSON解析
由于你的字符串格式和JSON数组完全兼容,直接使用str.json_decode解析:
parsed_series1 = series1.str.json_decode(pl.List(pl.Float64)) parsed_series2 = series2.str.json_decode(pl.List(pl.Float64))
- 该方法更简洁,Polars的JSON解析是底层优化的向量化操作,处理大数量级数据时效率极高
内容的提问来源于stack exchange,提问作者dmenesesg
相关产品推荐
相关产品推荐

