python - 在熊猫中使用正则表达式从多个括号中提取字符串
问题描述
我正在尝试从 pandas df 中的多个括号中提取多个字符串并创建新列。
以下字符串位于 df 的一列中:
Unfurnished 1 Bdrm 1st flr Flat. Hall. Lounge. Kitch. Bdrm. Shower rm (CT band - A). Deposit & references required. No pets. No smokers. Rent £500 p.m Entry by arr. Viewing Owner 07425 163047 or contact solicitors. Landlord reg: 305350/110/22531. (EPC band - C).
我一直在尝试在 2 个新列中提取 CT 波段和 EPC 波段数据(每个列分别用于每组信息)。我尝试了多个版本的代码,还尝试使用来自https://regex101.com/r/5XjNqh/1的信息
例如:下面的代码
properties['Council_tax']=properties.Description.str.extract('(\(CT[^()*&?%])',expand=False)
返回
(CT
预期输出:
| Description | Council_tax_band | EPC_band |
|--------------------|------------------|----------|
| Above string | A | C |
| Example string 2 | B | F |
| Example string 3 | C | D |
同时,“乐队”这个词也被发现为“乐队”。
我不相信我在这里正确地使用了正则表达式。有任何想法吗?
解决方案
您可以使用
df['Council_tab_band'] = df['Description'].str.extract(r'(?i)\(CT\s+band\s*-\s*([^()]+)\)', expand=False)
df['EPC_band'] = df['Description'].str.extract(r'(?i)\(EPC\s+band\s*-\s*([^()]+)\)', expand=False)
正则表达式详细信息
(?i)
- 不区分大小写的修饰符\(
- 一个(
字符EPC
- 一个字符串\s+
- 1+ 空格band
- 一个字band
\s*-\s*
- 用空格括起来的连字符([^()]+)
(
- 第 1 组:除和之外的任何 1 个或多个字符)
\)
- 一个)
字符。
推荐阅读
- java - 如何使用 Spring MVC 框架为 Spring Boot 应用程序加载 jsp 页面?我得到空指针异常
- ruby - 检查 Hiera 值是否存在,如果存在,请将每个值分配给变量
- java - 编辑访问控制练习 - java
- python - 无法从 keras.preprocessing.image 导入 apply_transform
- html - 需要 html 标签的建议
- php - 为什么我不能从不同的 PC 执行 .php?
- firebase - Firebase 身份验证 UI 在 Web 中不起作用
- python - Insert a line into a PowerPoint using python pptx module
- java - 无法计算像 1,000,000,000 这样的大量迭代
- visual-studio - 无法访问我的 TFS 服务器控制台 Web