You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

思路说明

  1. 先将地址按逗号拆分并清理空格,得到各部分列表;
  2. 反转列表后,最后三位固定对应邮编、州、城市,不受前面是否有街道的影响;
  3. 反转列表中除最后三位外的部分(如果存在),拼接后还原为街道字段,无街道则填充pd.NA;
  4. 通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:01:06