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

处理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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:03:49