处理DataFrame时区列:保留斜杠后城市且不删除无斜杠条目
处理DataFrame中'timezone'列,提取'city'部分同时保留无'/'的条目
嘿,我完全懂你这种头疼的感觉!之前处理时区数据的时候也踩过一模一样的坑——用了网上常见的拆分方法,结果把那些不带斜杠的条目直接搞没了。别急,我给你几个靠谱的解决方案,从简洁的矢量化操作到你尝试的循环方法都有:
方法一:用Pandas矢量化字符串操作(最推荐)
Pandas的字符串方法天生支持这种场景,既能提取斜杠后的城市名,还能自动保留没有斜杠的原内容,完全不用写复杂的判断逻辑:
import pandas as pd # 假设你的DataFrame名为df df['timezone'] = df['timezone'].str.split('/').str[-1]
原理很直白:str.split('/')会把每个字符串按斜杠拆成列表——比如'Europe/London'会变成['Europe', 'London'],而不带斜杠的'UTC'会变成['UTC'];紧接着str[-1]取每个列表的最后一个元素,完美兼容两种格式的内容!
方法二:用apply结合lambda函数(更灵活)
如果需要更明确的判断逻辑(比如想清晰区分“有斜杠”和“无斜杠”的情况),可以用apply搭配lambda函数:
df['timezone'] = df['timezone'].apply(lambda x: x.split('/')[-1] if '/' in x else x)
这个写法一目了然:先检查字符串里有没有斜杠,有就拆分取最后一段,没有就原封不动返回原值,不会出现丢失数据的问题。
方法三:循环处理(你尝试的方案)
如果你还是想通过循环来实现,这个方案也能正常工作(虽然处理大数据集时效率不如前两种矢量化方法):
for idx, val in df['timezone'].items(): if '/' in val: df.loc[idx, 'timezone'] = val.split('/')[-1] # 没有斜杠的条目不做修改,自动保留原内容
这里用items()来遍历索引和对应的值,判断后再更新,逻辑清晰易懂。
内容的提问来源于stack exchange,提问作者scatter
相关产品推荐
相关产品推荐

