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

Pandas DataFrame按分隔符拆分列值并映射至多列的实现方案

解决Pandas地址拆分错位问题:精准映射city/state/country列

问题背景

现有Pandas DataFrame包含location_name、city、state、country列,需要将location_name中的逗号分隔地址拆分后,准确对应到后三列。已知核心规则:

  • location_name的地址格式不固定,最后一项始终是国家名
  • 街道、城市、州字段为可选(可能缺失)
  • 直接使用df[['city','state', 'country']] = df['location_name'].str.split(',', expand=True)会因字段缺失导致列映射错位。

解决方案

核心思路是先拆分地址为清洗后的列表,从后往前提取固定位置的字段,缺失项自动填充None(或空值),避免错位。

实现代码

import pandas as pd

# 示例测试数据
data = {
    'location_name': [
        'New York, NY, USA',
        'London, UK',
        'Paris, France',
        'Beijing, China',
        'Sydney, NSW, Australia',
        'Toronto, Canada',
        '123 Main St, Chicago, IL, USA'  # 含街道的复杂地址
    ]
}
df = pd.DataFrame(data)

# 定义地址解析函数
def parse_location(location_str):
    # 拆分地址并去除每个片段的首尾空格
    parts = [p.strip() for p in location_str.split(',')]
    # 从后往前提取对应字段
    country = parts[-1]
    # 州字段:仅当地址片段数≥2时取倒数第二项,否则为None
    state = parts[-2] if len(parts) >= 2 else None
    # 城市字段:片段数≥3时取倒数第三项;仅2个片段时取第一项;否则为None
    city = parts[-3] if len(parts) >= 3 else parts[0] if len(parts) == 2 else None
    return pd.Series([city, state, country])

# 应用解析函数到DataFrame
df[['city', 'state', 'country']] = df['location_name'].apply(parse_location)

print(df)

代码说明

  1. 先对地址字符串做清洗拆分:按逗号分割后,去除每个片段的首尾空格,避免地址中的冗余空格干扰判断
  2. 固定提取逻辑:
    • 无论地址有多少片段,最后一项直接作为country
    • 州字段仅在地址片段数≥2时提取倒数第二项,否则留空
    • 城市字段根据片段数动态判断:3段及以上取倒数第三项,2段时取第一项,1段时留空
  3. 用pd.Series返回结果,直接映射到目标列,保证列对齐

输出示例

location_name      city state    country
0       New York, NY, USA  New York    NY        USA
1            London, UK     London  None         UK
2           Paris, France     Paris  None      France
3           Beijing, China    Beijing  None       China
4   Sydney, NSW, Australia    Sydney   NSW  Australia
5          Toronto, Canada    Toronto  None      Canada
6 123 Main St, Chicago, IL, USA   Chicago    IL        USA

扩展说明

如果需要保留街道信息,可以在函数中新增street字段的提取逻辑:当地址片段数≥3时,将前len(parts)-2个片段合并为街道内容,不影响city/state/country的映射逻辑。

内容的提问来源于stack exchange,提问作者ozzboy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:33:23