Python3.6列表转DataFrame时字符串前出现'b',求字面转换方法
解决Python3.6列表转DataFrame时字符串带
b'前缀的问题 嘿,这个问题我之前踩过坑!出现b'xxx'的本质是你的列表里的“字符串”其实不是Python的str类型,而是bytes类型——在Python3里这俩是完全不同的类型,pandas显示bytes对象的时候就会自动加上b前缀来区分类型。
先给你确认一下:你可以跑一行代码看看元素类型,比如print(type(x[0][0])),如果输出是<class 'bytes'>,那肯定就是这个原因没错了。
下面给你两种实用的解决思路:
1. 转DataFrame前先把列表里的bytes解码成str
写个简单的辅助函数遍历整个列表,把bytes元素转成普通字符串:
def decode_to_string(item): # 判断元素是不是bytes类型,是就解码,不是就原样返回 if isinstance(item, bytes): return item.decode('utf-8') # 这里编码按需调整,比如gbk、gb2312等 return item # 处理整个二维列表 processed_list = [[decode_to_string(element) for element in row] for row in x] # 再转成DataFrame df = pd.DataFrame(processed_list)
2. 已经生成DataFrame后再处理
如果已经得到了带b'前缀的DataFrame,也可以针对性处理字符串列:
import pandas as pd # 遍历所有列 for col in df.columns: # 只处理object类型的列(bytes在DataFrame里会被识别为object) if df[col].dtype == object: # 检查该列第一个元素是不是bytes if isinstance(df[col].iloc[0], bytes): # 批量解码 df[col] = df[col].str.decode('utf-8')
小提醒
解码的时候一定要用对编码格式!如果你的bytes是用GBK编码生成的,就换成decode('gbk'),不然会出现乱码或者UnicodeDecodeError哦。
内容的提问来源于stack exchange,提问作者matthewr
相关产品推荐
相关产品推荐

