Python 3.x 正则表达式调用的字符串中缺少所需字符

Python 3.x 正则表达式调用的字符串中缺少所需字符,python-3.x,regex,dataframe,Python 3.x,Regex,Dataframe,我缺少此字符串中所需的字符: df=pd.DataFrame({Score:[1.20\n1\n99%\n6.75\nX\n-\n14\n2\n1%\n+72]}) 预期结果: 1.20\n6.75\n14.00 下面是我使用的正则表达式: .str.findall(r'(?m)^\d+\.\d+$').str.join("\n") 此正则表达式未捕获\n14;我希望结果为\n14.00。换句话说,正则表达式必须处理丢失的浮点,并根据需要插入00。这意味着如果这发生在列

我缺少此字符串中所需的字符:

df=pd.DataFrame({Score:[1.20\n1\n99%\n6.75\nX\n-\n14\n2\n1%\n+72]})
预期结果:

1.20\n6.75\n14.00
下面是我使用的正则表达式:

.str.findall(r'(?m)^\d+\.\d+$').str.join("\n")
此正则表达式未捕获
\n14
;我希望结果为
\n14.00
。换句话说,正则表达式必须处理丢失的浮点,并根据需要插入
00
。这意味着如果这发生在列表/字符串中的任何所需值上。所以我一直在寻找解决方案

请参见下面代码中的当前正则表达式结果:

import pandas as pd
import re

df=pd.DataFrame({'Score: ['1.20\n1\n99%\n6.75\nX\n-\n14\n2\n1%\n+72']})

df = df['Score'].str.findall(r'(?m)^\d+\.\d+$').str.join("\n")
df
0       1.20\n6.75
Name: Score, dtype: object

以下是一些想法:

  • 您可能希望仅使用浮点值或包含至少两位数字的整数匹配行:
  • r'(?m)^(?:\d+\.\d+\\d{2,})$'
    

  • 如果下一行也仅包含数字,则可以提取仅包含浮点数和任意数量数字的所有行:
  • (?m)^(?:\d+\.\d+\d+$(?=\n\d+$)$
    

    在熊猫中,你可以使用

    df=pd.DataFrame({'Score':['1.20\n1\n99%\n6.75\nX\n-\n14\n2\n1%\n+72']})
    df['ID']=df['Score'].str.findall(r'(?m)^(\d+\.\d+\d{2,})$)
    df['ID']=df['ID'].apply(lambda x:“\n”.join(映射(lambda:f'{a:.2f}',映射(float,x)))
    >>>df['ID']
    #=>0 1.20\n6.75\n14.00
    #名称:ID,数据类型:object
    
    也许你只是想要
    r'(?m)^(?:\d+\.\d+\d{2,})$'
    ?看见这里的规则是什么?请注意,
    (?m)^(?:\d+\。\d+\d+$(?=\n\d+$)$
    也可以工作,但它遵循不同的逻辑。你需要什么逻辑?谢谢。将检查rues…了解我的regretA regexp无法添加任何内容,它所能做的只是返回部分输入字符串。如果要修改结果,则需要使用
    .str.replace()
    我希望正则表达式捕获该值,即使缺少浮点数,也就是说,当只有整数时。这可能会在所需值之间不时发生。对不起,我的解释可能缺少正确的技术标准,无法接受解决方案。谢谢你好。若你们可以在可以的时候检查后续问题。