如何在Pandas中查找字母并提取其关联的字母数字组合
问题
需要在Pandas DataFrame中新增一列Sem,从Sem_Year列里提取以H开头后跟数字的组合(如H1、H2),不管该组合在Sem_Year中的位置。
初始数据示例:
| Month | Sem_Year |
|---|---|
| 2020-04-01 | H1 2020 |
| 2020-05-01 | 2020 H1 |
| 2020-06-01 | H1 2020 |
| 2020-07-01 | H2 2020 |
| 2020-08-01 | H2 2020 |
| 2020-09-01 | 2020 H2 |
| 2020-10-01 | 2020 H2 |
| 2020-11-01 | H2 2020 |
| 2020-12-01 | H2 2020 |
| 2021-01-01 | H1 2021 |
| 2021-02-01 | H1 2021 |
期望处理后的数据:
| Month | Sem_Year | Sem |
|---|---|---|
| 2020-04-01 | H1 2020 | H1 |
| 2020-05-01 | 2020 H1 | H1 |
| 2020-06-01 | H1 2020 | H1 |
| 2020-07-01 | H2 2020 | H2 |
| 2020-08-01 | H2 2020 | H2 |
| 2020-09-01 | 2020 H2 | H2 |
| 2020-10-01 | 2020 H2 | H2 |
| 2020-11-01 | H2 2020 | H2 |
| 2020-12-01 | H2 2020 | H2 |
| 2021-01-01 | H1 2021 | H1 |
| 2021-02-01 | H1 2021 | H1 |
解决方案
可以使用Pandas的str.extract()方法结合正则表达式,精准提取目标内容:
代码实现
import pandas as pd # 构造示例数据 data = { 'Month': ['2020-04-01', '2020-05-01', '2020-06-01', '2020-07-01', '2020-08-01', '2020-09-01', '2020-10-01', '2020-11-01', '2020-12-01', '2021-01-01', '2021-02-01'], 'Sem_Year': ['H1 2020', '2020 H1', 'H1 2020', 'H2 2020', 'H2 2020', '2020 H2', '2020 H2', 'H2 2020', 'H2 2020', 'H1 2021', 'H1 2021'] } df = pd.DataFrame(data) # 新增Sem列,提取H后跟数字的组合 df['Sem'] = df['Sem_Year'].str.extract(r'(H\d+)') print(df)
代码说明
str.extract(r'(H\d+)'):正则表达式H\d+匹配以字母H开头、后面跟一个或多个数字的字符串,括号用于捕获目标匹配内容。- 无论
H1/H2在Sem_Year中的位置是前还是后,该正则都能精准提取对应的内容。
内容的提问来源于stack exchange,提问作者Mufeez
相关产品推荐
相关产品推荐

