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

Python从Pandas DataFrame列中提取连字符分隔的深度数值问题

解决Pandas Depth列提取第二个数值的问题

我来帮你搞定这个Depth列第二个数值提取失败的问题!咱们先从最简洁高效的方案入手,再分析你之前尝试里的问题所在。

最优解决方案:一次性提取两个数值

直接用带双捕获组的正则表达式,通过str.extract一次性把DepthFrom和DepthTo都提取出来,这是Pandas处理这类字符串拆分的标准做法:

import pandas as pd

# 读取并初始化数据
ConvCore = pd.read_csv(r'ConvCore.csv', encoding='cp1252')
ConvCore.columns = ['Depth', 'k', 'phi', 'Well']

# 用正则一次性匹配两个数值,自动拆分成两列
ConvCore[['DepthFrom', 'DepthTo']] = ConvCore['Depth'].str.extract(r'(\d+\.?\d*)-(\d+\.?\d*)', expand=True)

# 转为浮点类型(根据需求可选,方便后续数值计算)
ConvCore['DepthFrom'] = ConvCore['DepthFrom'].astype(float)
ConvCore['DepthTo'] = ConvCore['DepthTo'].astype(float)

正则说明:

  • (\d+\.?\d*):匹配整数或小数(比如100、100.5都能匹配),第一个括号捕获DepthFrom,第二个捕获DepthTo
  • -:匹配分隔用的连字符,如果你的数据里连字符前后有空格(比如100 - 200),把正则改成(\d+\.?\d*)\s*-\s*(\d+\.?\d*)即可

你之前尝试的问题分析

咱们来看看你之前的代码为什么没成功:

  • 单独提取DepthTo时用'-([0-9.]+)':如果你的Depth字段里连字符前后有空格(比如100 - 200),这个正则就匹配不到,需要加上空格匹配'-\\s*([0-9.]+)'
  • 用re.search循环的方式:re.search是处理单个字符串的函数,不能直接作用于Pandas Series,而且循环逻辑也有问题(for i in ConvCore遍历的是列名,不是行索引)
  • 用str.split("-")之后没取第二个元素:如果用split,应该写成ConvCore['DepthTo'] = ConvCore['Depth'].str.split("-", expand=True)[1],但要注意如果有多个连字符,加上n=1参数只拆分一次:str.split("-", n=1, expand=True)[1]

处理特殊格式的情况

如果你的Depth列存在格式不统一的情况(比如多余空格、非标准分隔符),可以先做数据清洗:

# 去除前后空格,把连字符前后的空格统一替换成纯连字符
ConvCore['Depth'] = ConvCore['Depth'].str.strip().str.replace(r'\s*-\s*', '-', regex=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:44:04