如何移除DataFrame文本列的b''编码前缀 解码得到NaN该如何解决
问题原因
你调用str.decode('utf-8')返回NaN的核心原因是body列的内容实际是字符串类型,而非bytes字节类型:你看到的b''是字符串本身的内容组成部分,不是Python字节对象的类型标识,针对字节序列的decode方法无法作用于字符串,因此返回空值NaN。
解决方案
分两种场景对应处理:
场景1:body列是字符串类型(可通过
print(df.dtypes)确认)
直接对字符串做内容清理即可,两种常用写法:- 固定截取法(适配你当前的
b'xxx'标准格式)
df['body'] = df['body'].str.slice(start=2, stop=-1)- 正则替换法(兼容性更强,可适配部分格式不统一的行)
df['body'] = df['body'].str.replace(r"^b'(.*)'$", r"\1", regex=True)- 固定截取法(适配你当前的
场景2:body列确实是bytes类型,decode返回NaN是因为存在非UTF-8编码字符
增加异常处理参数即可:# 忽略非法编码字符 df['body'] = df['body'].str.decode('utf-8', errors='ignore') # 或换用兼容所有单字节的latin-1编码尝试 df['body'] = df['body'].str.decode('latin-1')
处理完成后可通过print(df['body'].head())验证结果是否符合预期。
内容的提问来源于stack exchange,提问作者Yoo
相关产品推荐
相关产品推荐

