Pandas可选前

2024-07-04 18:16:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在数据集中有一列,其格式如下:

'XX4H30M'

我需要把这些序列中的数字提取成两列(“H”和“M”)。在

如果格式与所描述的完全相同,则以下内容符合我的需要:

^{pr2}$

然而,本系列中的许多单元格只包含

^{3}$

XX3H

有没有一种方法可以选择性地提取这些模式来插入到全局数据框中?在

对于一组具体的例子:

df = pd.DataFrame({'A': ['XX1H30M', 'XX45M', 'XX2H'])

最后会变成

Out: 
A  H  M
0  XX1H30M  1  30
1  XX45M  0  45
2  XX2H  2  0

Tags: 数据方法格式模式序列数字全局例子
2条回答

你可以试试这样的方法:

df.assign(H=df.A.str.extract('([\d]+)H', expand=False),
          M=df.A.str.extract('([\d]+)M', expand=False)).fillna(0)

输出:

^{pr2}$

另一个在一个步骤中提取HM的选项,这里使用(?:(?P<H>\d+)H)?(?:(?P<M>\d+)M)?将{}和{}捕获为命名组;要避免由于两个组都是可选的而匹配空字符串,请在模式的开头添加一个前瞻性断言{}:

df = pd.DataFrame({'A': ['XXX1H30M', 'XXX45M', 'XXX2H', 'XXX']}) 

df.A.str.extract(r'(?=\d+H|\d+M)(?:(?P<H>\d+)H)?(?:(?P<M>\d+)M)?', expand=True).fillna(0)

#   H    M
#0  1   30
#1  0   45
#2  2    0
#3  0    0

这比单独提取要快一些:

^{pr2}$

相关问题 更多 >

    热门问题