首页 > 解决方案 > 在 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


标签: python-3.xregexpandasdataframe

解决方案


您可以使用

>>> df['Score'].str.findall(r'(?m)^(?:Over|Under)\n.*\n(.*)').str.join("\n")
0    1.65\n2.23
Name: Score, dtype: object

请参阅正则表达式演示

正则表达式匹配所有出现在下面的第二行OverUnder行,然后将结果与换行符连接起来。

细节

  • (?m)-re.M内联选项
  • ^- 一行的开始
  • (?:Over|Under)- 两个字符串之一
  • \n.*\n- 换行符,除换行符之外的任何零个或多个字符,尽可能多,然后是换行符
  • (.*)- 第 1 组:除换行符之外的任何零个或多个字符,尽可能多。

推荐阅读