Pandas中将地址对象转字符串遇bytes类型问题的解决方法
解决Pandas中Bytes类型地址列的解码与文本清理问题
错误原因
直接对Series调用decode('UTF-8')会报错,因为decode是单个bytes对象的方法,而Pandas Series是数据集合,没有这个属性,必须对Series中的每个元素单独处理。
解决方案
方法1:修复已生成的Bytes类型列
如果已经生成了Address_Line1_2的bytes列,可以通过以下两种方式解码:
方式A:使用apply遍历每个元素解码
# 对每个bytes元素调用decode方法 df['Address_Line1_2'] = df['Address_Line1_2'].apply(lambda x: x.decode('UTF-8'))
方式B:使用Pandas的str访问器解码
Pandas的str访问器支持对bytes元素批量解码,代码更简洁:
df['Address_Line1_2'] = df['Address_Line1_2'].str.decode('UTF-8')
方法2:优化原处理流程,避免生成Bytes类型
原代码中astype('|S120')是将字符串强制转为bytes类型,这一步完全没必要。直接去掉该步骤,并改用Pandas向量化的str.replace(比apply+lambda效率更高,适合大型数据集):
import pandas as pd import re data = ['1111 S. Washington Street', '2222 S. Jefferson Ave', '3333 W. Madison Court #2'] df = pd.DataFrame(data, columns=['Address_Line1']) # 1. 将地址转大写 df['Address_Line1_2'] = df['Address_Line1'].str.upper() # 2. 清理特殊字符:用向量化的str.replace,效率远高于apply遍历 df['Address_Line1_2'] = df['Address_Line1_2'].str.replace('[^A-Za-z0-9 ]+', '', regex=True) # 查看处理结果 print(df.info()) print(df.head())
处理后Address_Line1_2会保持字符串类型,无需后续解码操作。
内容的提问来源于stack exchange,提问作者Sandra T
相关产品推荐
相关产品推荐

