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

如何为Pandas Series中城市名添加_sub后缀(不影响区县名)?

Pandas Series 城市名批量加后缀问题

原始数据

你的Pandas Series内容如下:

London:Alpha
London
London:Beta
London:Delta
Paris

目标效果

要给每个城市名(注意不是区县名)末尾加_sub,最终得到:

London_sub:Alpha
London_sub
London_sub:Beta
London_sub:Delta
Paris_sub

你踩的坑

你试了两种方法,都没达到预期:

  1. 第一种链式操作:
names_df[0] = names_df[0] \
        .str.split(':') \
        .apply(lambda x: x[0] + '_sub') \
        .str.join(':')
  • 问题出在两处:一是apply里只返回了改后的城市名,直接把区县部分丢了;二是str.join(':')是把字符串的每个字符用:拼接,所以才会出现L:o:n:d:o:n:_:s:u:b这种离谱结果。
  1. 第二种方法:
names_df[0] = names_df[0]\
    .str.split(':')\
    .apply(lambda x: '_sub:'.join(x))
  • 问题是:当行里只有城市名(比如London)时,拆分后是只有一个元素的列表,join用_sub:当分隔符的话,分隔符根本不会生效,自然加不上_sub。

正确做法

方法一:处理拆分后的列表

通过判断拆分后的列表长度,分别处理有区县和无区县的情况:

names_df[0] = names_df[0].str.split(':').apply(lambda x: f"{x[0]}_sub:{x[1]}" if len(x) > 1 else f"{x[0]}_sub")

方法二:正则替换(更简洁)

用正则匹配开头到第一个:(或整个字符串)的城市名部分,直接替换加后缀:

names_df[0] = names_df[0].str.replace(r'^([^:]+)', r'\1_sub', regex=True)

这个正则的逻辑是:^([^:]+)匹配字符串开头到第一个:之前的内容(如果没有:就匹配整个字符串),然后把匹配到的内容替换成原内容_sub,两种情况都能覆盖。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:37:16