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

如何处理不规则Python DataFrame单列数据,拆分多列并提取SNO?

问题描述

导入的数据格式不规则,所有内容都集中在DataFrame的单列中,数据示例如下:

import pandas as pd
# 所有数据均位于一列
df = pd.DataFrame([
    "1 CABATT   CAR BATTERY VOLTAGE  -10.0 200.0",
    "2 CPTEMP   CAR DAS PANEL TEMP C -10.0  200.0",
    "3 CAPTMA   CAR PANEL A TEMP C  -10.0   200.0",
    "205 SPPT4P   SPEED INPUT 4 CYCLINDER  0.0  32000.0"
], columns=['raw_data'])

尝试提取前三位数字作为SNO时,使用了以下代码:

# 尝试提取前三位数字作为SNO
print(df['raw_data'].str.extract('(?P<SNO>\S\d{3}\S)'))

但输出结果全为NaN:

0   NaN
1   NaN
2   NaN
3   NaN

期望将单列数据拆分为包含SNo、ABBRE、DESCRIPTION、MIN、MAX的多列,目标输出格式如下:

SNo   ABBRE                DESCRIPTION     MIN     MAX
0    1  CABATT        CAR BATTERY VOLTAGE  -10.0   200.0
1    2  CPTEMP   CAR DAS PANEL TEMP C      -10.0   200.0
2    3  CAPTMA      CAR PANEL A TEMP C      -10.0   200.0
3  205  SPPT4P  SPEED INPUT 4 CYCLINDER     0.0  32000.0
解决方法

你之前的正则表达式问题在于:\S\d{3}\S要求数字前后都是非空白字符,但实际数据中SNO是开头的连续数字(可能1-3位),后面直接跟空格,因此匹配失败。以下是两种可行的处理方案:

方案1:正则分组提取(精准适配格式)

用带命名分组的正则表达式,直接匹配每一部分的规则:

# 定义匹配各列的正则模式
pattern = r'(?P<SNo>\d+)\s+(?P<ABBRE>\w+)\s+(?P<DESCRIPTION>.+?)\s+(?P<MIN>-?\d+\.\d+)\s+(?P<MAX>-?\d+\.\d+)$'
# 提取数据
result = df['raw_data'].str.extract(pattern)

# 转换列的数值类型
result['SNo'] = result['SNo'].astype(int)
result[['MIN', 'MAX']] = result[['MIN', 'MAX']].astype(float)

print(result)

正则规则说明:

  • (?P<SNo>\d+):匹配开头的连续数字作为序号
  • (?P<ABBRE>\w+):匹配序号后的连续字母/数字组合作为缩写
  • (?P<DESCRIPTION>.+?):非贪婪匹配中间的描述文本,直到遇到最后两个数值
  • (?P<MIN>-?\d+\.\d+):匹配带负号的浮点数作为最小值
  • (?P<MAX>-?\d+\.\d+)$:匹配行尾的浮点数作为最大值

方案2:分割后重组(适合格式稳定的场景)

如果数据的分隔符是多个空格,可以先按空格分割,再重组各列:

# 按多个空格分割每行数据,展开为多列
split_data = df['raw_data'].str.split(r'\s+', expand=True)

# 重组目标列
result = pd.DataFrame({
    'SNo': split_data[0].astype(int),
    'ABBRE': split_data[1],
    'DESCRIPTION': split_data.loc[:, 2:-2].apply(' '.join, axis=1),
    'MIN': split_data.iloc[:, -2].astype(float),
    'MAX': split_data.iloc[:, -1].astype(float)
})

print(result)

两种方案都能得到目标结果:正则法更灵活,适合描述文本含空格的复杂场景;分割法更直观,适合数据格式稳定的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:10:27