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

如何以Pythonic方式基于关键词拆分DataFrame生成class1/class2/class3列?

Pythonic方式拆分DataFrame中的Class字段

很巧,我刚处理过类似的需求,用pandas的矢量化字符串方法就能轻松搞定,完全不用写繁琐的循环,绝对够Pythonic。

先还原你的原始DataFrame:

import pandas as pd

df1 = pd.DataFrame({
    'overall': [
        'class1-10/class2-11/class3-13',
        'class3-31/class2-22/class1-23',
        'abc/def/xyz/prq'
    ]
})

解决方案:用str.extract分别提取指定Class的数值

核心思路是利用pandas的str.extract方法,通过正则表达式精准匹配每个classX-后面的数字,不管它们在字符串中的顺序如何。代码如下:

# 逐个提取class1到class3对应的数字,无匹配则返回NaN
df1['class1'] = df1['overall'].str.extract(r'class1-(\d+)', expand=False)
df1['class2'] = df1['overall'].str.extract(r'class2-(\d+)', expand=False)
df1['class3'] = df1['overall'].str.extract(r'class3-(\d+)', expand=False)

效果验证

运行后你会得到完全符合预期的结果(注:你给出的示例输出中第二行class3写的是32,应该是输入里的31,上述代码会正确提取为31):

overall class1 class2 class3
0  class1-10/class2-11/class3-13     10     11     13
1  class3-31/class2-22/class1-23     23     22     31
2          abc/def/xyz/prq      NaN    NaN    NaN

为什么这是Pythonic的实现?

  • 矢量化操作:pandas的字符串方法是底层优化过的,比手动遍历每一行效率高几个数量级,尤其是处理大数据集时优势明显。
  • 简洁可读:每行代码只做一件事,清晰表达了“提取对应class数值”的意图,维护成本低。
  • 自动处理缺失值:没有匹配到对应class的行,会自动填充NaN,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:41:30