【问题标题】:Data cleanup with Regex in Pandas在 Pandas 中使用正则表达式进行数据清理
【发布时间】:2021-04-09 19:35:48
【问题描述】:

我正在尝试使用正则表达式来提取两个元素字段。

从此列表中:df=pd.DataFrame({'Score':'Touch\n4.90\nDraw\n4.30\nDown\n1.58\nOver\n2.5\n1.65强>\n低于\n2.5\n2.23']})

想要的结果:1.65\n2.23

如图所示,我已部分尝试删除一些不需要的位,但与其他位一起丢失了。我需要在我的正则表达式解决方案中添加什么才能达到我想要的结果。

将 pandas 导入为 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
名称:分数,数据类型:对象


【问题讨论】:

    标签: python-3.x regex pandas dataframe


    【解决方案1】:

    你可以使用

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

    请参阅regex demo

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

    详情

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

    【讨论】:

    • 太棒了。对于像我这样的新手有什么简单的解释吗?一直很感激:)
    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 2021-02-04
    • 2020-09-10
    • 2017-03-11
    • 2020-07-03
    • 1970-01-01
    • 2019-04-09
    • 2010-12-31
    相关资源
    最近更新 更多