我有一个Pandas 系列,上面有城市和地区的名称:

London:Alpha
London
London:Beta
London:Delta
Paris

我想在每个城市(但不是地区!)名称的末尾添加"_SUB",以便转换后的系列如下所示:

London_sub:Alpha
London_sub
London_sub:Beta
London_sub:Delta
Paris_sub

据我所知,我需要分裂,改变第一部分,重新加入系列,所以我try 了这个链:

names_df[0] = names_df[0] \
        .str.split(':') \
        .apply(lambda x: x[0] + '_sub') \
        .str.join(':')

但在这种情况下,我失go 了一个地区部分(Alpha、Beta、Delta),结果看起来很难看:

L:o:n:d:o:n:_:s:u:b

我试过另一种方法:

names_df[0] = names_df[0]\
    .str.split(':')\
    .apply(lambda x: '_sub:'.join(x))

但它不会将‘_SUB’附加到没有地区的行:(

我做错了什么?

推荐答案

请改用单个正则表达式替换:

s = pd.Series(['London:Alpha', 'London', 'London:Beta', 'London:Delta', 'Paris'])
s = s.str.replace(r'^([^:]+)', r'\1_sub', regex=True)
  • ^([^:]+)-从字符串^的开头开始捕获除:个字符之外的一组字符

0    London_sub:Alpha
1          London_sub
2     London_sub:Beta
3    London_sub:Delta
4           Paris_sub
dtype: object

Python相关问答推荐

取相框中一列的第二位数字

获取Azure Pipelines以从pyproject.toml(而不是relevments_dev.文本)安装测试环境

如何观察cv2.erode()的中间过程?

Polars -转换为PL后无法计算熵.列表

"如果发生特定错误,返回值

阅读Polars Python中管道的函数定义

拆分pandas列并创建包含这些拆分值计数的新列

在Pandas框架中截短至固定数量的列

我必须将Sigmoid函数与r2值的两种类型的数据集(每种6个数据集)进行匹配,然后绘制匹配函数的求导.我会犯错

我在使用fill_between()将最大和最小带应用到我的图表中时遇到问题

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

将图像拖到另一个图像

为什么默认情况下所有Python类都是可调用的?

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

如何获取numpy数组的特定索引值?

如何在WSL2中更新Python到最新版本(3.12.2)?

如何合并两个列表,并获得每个索引值最高的列表名称?

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

Flask运行时无法在Python中打印到控制台