如何用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
相关产品推荐
相关产品推荐

