如何以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
相关产品推荐
相关产品推荐

