在Python的Polars库中转换含非UTF-8字符的二进制为字符串变量
解决Polars二进制列转字符串时的非UTF-8字符报错问题
直接用cast(pl.String)转换二进制列时,Polars会以严格模式验证UTF-8编码,遇到无效字符就抛出错误。要实现将非UTF-8字符转为空白的需求,你可以使用Polars的str.from_utf8方法,它支持自定义错误处理策略。
解决方案代码
import polars as pl import pandas as pd pd_df = pd.DataFrame([[b"bob", b"value 2", 3], [b"jane", b"\xc4", 6]], columns=["a", "b", "c"]) df = pl.from_pandas(pd_df) column_names = df.columns for col_name in column_names: if df[col_name].dtype == pl.Binary: print(col_name) # 先将二进制按UTF-8解码,无效字符替换为占位符后再转为空白 df = df.with_columns( pl.col(col_name).str.from_utf8(errors='replace').replace('\ufffd', '') ) print(df)
关键说明
str.from_utf8(errors='replace'):将二进制数据按UTF-8解码,无法识别的无效字节会被替换为Unicode占位符�(U+FFFD).replace('\ufffd', ''):把占位符替换成空白,达到你需要的非UTF-8字符转为空白的效果- 若想直接忽略无效字符,可将
errors设为'ignore',这样会直接丢弃无法解码的字节,无需额外替换:pl.col(col_name).str.from_utf8(errors='ignore')
内容的提问来源于stack exchange,提问作者J Egg
相关产品推荐
相关产品推荐

