Python3.6下Pandas DataFrame中隐式转换bytes为string的问题
解决Pandas中仅指定列的Bytes转String问题
嘿,我完全懂你的痛点——之前的方法把不需要处理的列搞成空值,肯定很闹心!其实核心就是只对需要转换的列(colb和cold)单独操作,别碰cola和colc就行,而且要先判断元素是不是bytes类型,避免非bytes元素报错或变空。
给你两种实用的解决方案:
方案1:逐列单独处理
这种方式直观,适合列数不多的情况:
import pandas as pd # 假设你的DataFrame名为df # 对colb列转换:仅当元素是bytes类型时解码,否则保持原样 df['colb'] = df['colb'].apply(lambda x: x.decode('utf-8') if isinstance(x, bytes) else x) # 对cold列做同样处理 df['cold'] = df['cold'].apply(lambda x: x.decode('utf-8') if isinstance(x, bytes) else x)
方案2:批量处理指定列
如果需要转换的列更多,用列表批量处理更高效:
cols_to_convert = ['colb', 'cold'] # 使用applymap对指定列的每个元素做判断和解码 df[cols_to_convert] = df[cols_to_convert].applymap(lambda x: x.decode('utf-8') if isinstance(x, bytes) else x)
为什么之前的方法会出问题?
你之前可能对整个DataFrame应用了解码操作,但cola和colc里的元素本身不是bytes类型(虽然列是object类型),强行调用decode()会导致错误,最终这些列的元素变成空值。而上面的方法加了isinstance(x, bytes)的判断,只会处理真正的bytes对象,其他类型的元素(比如原本就是字符串的)会原封不动保留,完美解决你的问题!
内容的提问来源于stack exchange,提问作者KSN_3410
相关产品推荐
相关产品推荐

