如何将Pandas中bytes转为UTF-8且不使整数变为NaN?
解决方案
方法1:布尔掩码 + 向量化字符串解码
通过布尔掩码筛选出bytes类型的元素,仅对这类元素执行UTF-8解码,整数元素原样保留,全程为向量化操作,执行效率更高:
import pandas as pd # 假设目标DataFrame为df,处理列名为'x' mask = df['x'].apply(lambda x: isinstance(x, bytes)) df.loc[mask, 'x'] = df.loc[mask, 'x'].str.decode('utf-8')
方法2:向量化类型处理函数
用np.vectorize封装类型判断与解码逻辑,实现元素级的向量化转换:
import pandas as pd import numpy as np decode_func = np.vectorize(lambda val: val.decode('utf-8') if isinstance(val, bytes) else val) df['x'] = decode_func(df['x'])
补充说明
- 方法1更推荐,因为它仅对需要转换的
bytes元素调用解码方法,避免对整列做无效操作,速度更快; - 如果需要将解码后的字符串统一转换为整数格式(和原有整数保持一致),可在解码后执行:
df['x'] = pd.to_numeric(df['x'], errors='ignore')
内容的提问来源于stack exchange,提问作者Cauder
相关产品推荐
相关产品推荐

