Pandas按分隔符拆分列:处理拆分长度可变的列移位需求
Pandas地址拆分自动对齐解决方案
针对地址字段有的包含街道、有的仅含城市/州/邮编的情况,要实现拆分后自动移位补全NaN,可以通过从右往左解析字段的方式精准匹配列:
实现代码
import pandas as pd # 构造原始数据 df = pd.DataFrame( data={'Address': ['Buffalo, NY, 14201', 'Stackoverflow Street, New York, NY, 99999']} ) def parse_address(address): # 拆分地址并去除各部分首尾空格 parts = [p.strip() for p in address.split(',')] # 反转拆分后的列表,从右往左提取固定字段 reversed_parts = parts[::-1] # 固定提取最后三位为邮编、州、城市 zip_code = reversed_parts[0] state = reversed_parts[1] city = reversed_parts[2] # 剩余部分(如果有)拼接为街道,无则返回NaN street = ', '.join(reversed_parts[3:][::-1]) if len(reversed_parts) > 3 else pd.NA return pd.Series([street, city, state, zip_code], index=['Street', 'City', 'State', 'Zip']) # 应用解析函数到地址列 df[['Street', 'City', 'State', 'Zip']] = df['Address'].apply(parse_address) # 查看结果 print(df)
思路说明
- 先将地址按逗号拆分并清理空格,得到各部分列表;
- 反转列表后,最后三位固定对应邮编、州、城市,不受前面是否有街道的影响;
- 反转列表中除最后三位外的部分(如果存在),拼接后还原为街道字段,无街道则填充
pd.NA; - 通过
pd.Series将解析结果映射到指定列名,实现自动对齐。
输出结果完全符合需求:
Address Street City State Zip 0 Buffalo, NY, 14201 NaN Buffalo NY 14201 1 Stackoverflow Street, New York, NY, 99999 Stackoverflow Street New York NY 99999
内容的提问来源于stack exchange,提问作者Coldchain9
相关产品推荐
相关产品推荐

