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

如何用Python将Location列拆分为城市、州/邦、国家三列?

解决Location列拆分适配问题

你的原代码直接按, 拆分后赋值,会因为Location格式不同导致City/State列出现缺失值——比如Delhi, India拆分后State列会是NaN,India则City和State都是NaN。以下是适配所有输入情况的两种解决方法:

方法1:通过列表索引精准提取各部分

先把Location拆分成列表,再按位置逻辑提取城市、州/邦、国家:

import pandas as pd

df = pd.read_excel('filename.xlsx')
# 将Location拆分为列表形式
df['location_parts'] = df['Location'].str.split(', ')
# 国家始终是最后一个元素
df['Country'] = df['location_parts'].str[-1]
# 州/邦是倒数第二个元素,没有则填空字符串
df['State'] = df['location_parts'].str[-2].fillna('')
# 城市仅当拆分后有3个元素时取第一个,否则填空
df['City'] = df.apply(lambda x: x['location_parts'][0] if len(x['location_parts']) > 2 else '', axis=1)
# 删除临时辅助列
df = df.drop('location_parts', axis=1)

df.to_excel('filename.xlsx', index=False)

方法2:拆分后从右往左对齐列

先拆分出最多3列,再按“国家→州/邦→城市”的顺序反向赋值:

import pandas as pd

df = pd.read_excel('filename.xlsx')
# 拆分Location,最多拆成3列,不足部分自动补NaN
split_df = df['Location'].str.split(', ', expand=True, n=2)
# 最后一列固定为国家
df['Country'] = split_df[split_df.columns[-1]]
# 第二列(存在的话)为州/邦,否则填空
df['State'] = split_df.get(1, '').fillna('')
# 第一列(存在的话)为城市,否则填空
df['City'] = split_df.get(0, '').fillna('')

df.to_excel('filename.xlsx', index=False)

可选调整逻辑

如果需要把Delhi, India这类双元素格式中的Delhi识别为城市而非州/邦,只需修改方法1的City和State提取逻辑:

# 双元素时第一个是城市,三元素时第一个是城市、第二个是州/邦
df['City'] = df.apply(lambda x: x['location_parts'][0] if len(x['location_parts']) >= 2 else '', axis=1)
df['State'] = df.apply(lambda x: x['location_parts'][1] if len(x['location_parts']) > 2 else '', axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:14:58