如何用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 |
| 7in | 7in |
| 7.1" | 7.1" |
| 7.1inch | 7.1inch |
内容的提问来源于stack exchange,提问作者tosa
相关产品推荐
相关产品推荐

