Python 从字符串列中提取浮点数,并四舍五入到小数点后2位

Python 从字符串列中提取浮点数,并四舍五入到小数点后2位,python,pandas,floating-point,Python,Pandas,Floating Point,如果我有一个列中有值的数据框 4.5678 5 7.987.998 我只想提取小数点后2个值的数据 4.56 5 7.98 数据以字符串形式存储。任何帮助都将不胜感激。谢谢大家! def get_two_spaces(input): input_list = input.split('.') if len(input_list) >= 2: return input_list[0] + '.' + input_list[1][:2] return

如果我有一个列中有值的数据框

4.5678
5
7.987.998
我只想提取小数点后2个值的数据

4.56
5
7.98
数据以字符串形式存储。任何帮助都将不胜感激。谢谢大家!

def get_two_spaces(input):
    input_list = input.split('.')
    if len(input_list) >= 2:
        return input_list[0] + '.' + input_list[1][:2]
    return input
我将详细介绍这里发生的事情:

  • 我们将字符串拆分为围绕句点字符的字符串列表
  • 我们可以看到该列表中有多少项:
  • 如果有2个或更多,则返回整个第一个字符串、句点和第二个字符串的前2个字符
  • 如果没有,我们只返回原始输入

  • 使用
    str.extract
    +
    round

    r = s.str.extract('(\d+(?:\.\d+)?)', \
               expand=False).astype(float).round(2)
    print(r)
    0    4.57
    1    5.00
    2    7.99
    Name: 0, dtype: float64
    

    不幸的是,5不能像您预期的输出所描述的那样是整数,这将导致混合类型,通常不鼓励使用。

    另一种方法是:

    import pandas as pd
    
    df = pd.DataFrame(['4.5678','5','7.987.998'], columns=['A'])
    s = df['A'].replace(to_replace='^(\d+\.\d+)\.\d+', value=r'\1', regex=True)\
        .astype('float').map('{:,.2f}'.format)
    
    print(s)
    
    输出:

    0    4.57
    1    5.00
    2    7.99
    Name: A, dtype: object
    

    “df”?我想你指的是数据帧?假设您正在使用熊猫?这些是重要的标签。是的。我指的是数据帧。非常感谢。会记得that@beginnerdscientist被接受的答案不能回答你的问题,它与熊猫无关。请参阅:一个数字中不能有两个“小数点符号”,因此“7.987.998”中的“.”可能是一个“分组分隔符”,其值约为8 million find返回您要查找的特殊字符第一次出现的索引,此处
    这与熊猫无关,不回答问题。
    import pandas as pd
    
    df = pd.DataFrame(['4.5678','5','7.987.998'], columns=['A'])
    s = df['A'].replace(to_replace='^(\d+\.\d+)\.\d+', value=r'\1', regex=True)\
        .astype('float').map('{:,.2f}'.format)
    
    print(s)
    
    0    4.57
    1    5.00
    2    7.99
    Name: A, dtype: object