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

如何用Python及Pandas提取字符串数字与后缀并排序后拼接?

从字符串提取数值+后缀,排序Pandas列后拼接还原

直接按下面的步骤实现:

1. 用正则表达式拆分数值和后缀

核心是用正则匹配开头的带正负号、可选小数点的数值部分,剩下的就是后缀。正则表达式用:r'^([+-]?\d*(?:\.\d+)?)',它能匹配:

  • 正负整数:-10、7
  • 正负小数:-10.2、7.1

2. 处理Pandas列,拆分出数值和后缀

先给DataFrame新增两列,分别存储转成float的数值,以及提取后的后缀:

import pandas as pd

# 示例DataFrame(替换成你的实际数据)
df = pd.DataFrame({'目标列': ['7.1inch', '7.1"', '7in', '-10dB', '-10.2dB']})

# 定义正则模式
num_pattern = r'^([+-]?\d*(?:\.\d+)?)'

# 提取数值并转成float
df['数值'] = df['目标列'].str.extract(num_pattern).astype(float)
# 提取后缀:把数值部分替换为空
df['后缀'] = df['目标列'].str.replace(num_pattern, '', regex=True)

3. 按数值排序

直接用sort_values按新增的「数值」列排序:

df_sorted = df.sort_values('数值')

4. 拼接回原格式字符串

如果直接把float转字符串,整数会变成7.0这种格式,我们可以加个小函数处理,让整数显示成7,小数保持原格式:

def format_num(num):
    # 判断是否为整数,是就转int再转字符串,否则直接转字符串
    return str(int(num)) if num.is_integer() else str(num)

# 拼接数值和后缀,生成最终列
df_sorted['排序后结果'] = df_sorted['数值'].apply(format_num) + df_sorted['后缀']

完整运行示例

执行上面的代码后,输出的df_sorted关键列结果如下:

目标列排序后结果
-10.2dB-10.2dB
-10dB-10dB
7in7in
7.1"7.1"
7.1inch7.1inch

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:56:10