python-3.x - 在 Pandas 中使用正则表达式进行数据清理
问题描述
我正在尝试使用正则表达式来提取两个元素字段。
从此列表中: df=pd.DataFrame({'Score':'Touch\n4.90\nDraw\n4.30\nDown\n1.58\nOver\n2.5\n 1.65 \nUnder\n2.5\n 2.23 ']})
期望的结果:1.65\n2.23
As showing I've partially attempted to remove some unwanted bits but getting lost with the other. What do I need to add to my regex solution to achieve my desired result.
import pandas as pd
df=pd.DataFrame({'Score': ['Touch\n4.90\nDraw\n4.30\nDown\n1.58\nOver\n2.5\n1.65\nUnder\n2.5\n2.23']})
df = df['Score'].str.replace(r'([^\d\.\n])', '').str.strip()
df
0 4.90\n\n4.30\n\n1.58\n\n2.5\n1.65\n\n2.5\n2.23
Name: Score, dtype: object
解决方案
您可以使用
>>> df['Score'].str.findall(r'(?m)^(?:Over|Under)\n.*\n(.*)').str.join("\n")
0 1.65\n2.23
Name: Score, dtype: object
请参阅正则表达式演示。
正则表达式匹配所有出现在下面的第二行Over
或Under
行,然后将结果与换行符连接起来。
细节
(?m)
-re.M
内联选项^
- 一行的开始(?:Over|Under)
- 两个字符串之一\n.*\n
- 换行符,除换行符之外的任何零个或多个字符,尽可能多,然后是换行符(.*)
- 第 1 组:除换行符之外的任何零个或多个字符,尽可能多。
推荐阅读
- ibm-data-replication - 使用 Data Replication 的 Kafka 事务一致性消费者——如何配置?在 Kafka 中暂存是否比写入 WebHDFS 更好?
- automata - 如何构造 L={a^nb^m where n<=m<=2n} 的下推自动机?
- python - Python 脚本在 PyCharm 中无法正确运行,但在终端中运行
- mysql - 无法理解涉及跨不同表的不同列的 SQL 查询中的控制流
- c++ - C++ 使用智能指针对命名空间中的类进行前向删除
- sql - 我如何将 2 个表连接在一起,仅从第二个表中获取重复值中的一行值
- csv - 使用具有某些列名作为属性的 Cypher 加载 CSV
- angular - 执行 ngx-spinner 单元测试
- jquery - 在 Datatable 搜索中搜索带括号的值而不给出结果
- java - 位图图像未锐化