You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:去除DataFrame中重复小数点的实现方法

处理DataFrame中含多个小数点的数值数据清洗问题

我有一个存储手动输入数据的DataFrame,其中数据应为数值类型,但存在多处数据质量问题——部分值包含多个小数点(示例如下)。小数据集可手动修正,但大数据集操作过于繁琐,需去除多余小数点以得到指定格式结果。此前尝试的字符长度截取法因小数点位置不固定而失效。

原始数据

A              B
0   54.6464        46.8484
1   64.68461       65.4
2   95.79527       65.644
3   484.644.161    45.45
4   71.257.9       21.1
5   12.8           10.8
6   9.6            12.5
7   312.4          12.787.57.674

期望结果

A           B
0   54.646400   46.848400
1   64.684610   65.400000
2   95.795270   65.644000
3   484.644161  45.450000
4   71.257900   21.100000
5   12.800000   10.800000
6   9.600000    12.500000
7   312.400000  12.787577

失效的尝试代码

df['A'] = df['A'].str.slice(0,4)
df['B'] = df['B'].str.slice(0,4)

解决方案

核心思路是保留第一个小数点,删除后续所有小数点,再转换为数值类型并统一格式化小数位数,用正则或字符串处理即可实现批量清洗:

方法1:用正则表达式快速替换

直接通过str.replace配合正则,匹配第一个小数点后的所有小数点并删除:

import pandas as pd

# 处理每一列
df['A'] = df['A'].astype(str).replace(r'(?<=\.)\.', '', regex=True).astype(float).round(6)
df['B'] = df['B'].astype(str).replace(r'(?<=\.)\.', '', regex=True).astype(float).round(6)

方法2:自定义函数处理(更直观)

如果觉得正则不好理解,也可以写一个简单的函数实现逻辑:

def clean_multi_dot(val):
    s = str(val)
    first_dot_pos = s.find('.')
    if first_dot_pos == -1:
        return s
    # 保留第一个小数点,后面的小数点全部去掉
    return s[:first_dot_pos+1] + s[first_dot_pos+1:].replace('.', '')

# 应用到列上并格式化
df['A'] = df['A'].apply(clean_multi_dot).astype(float).round(6)
df['B'] = df['B'].apply(clean_multi_dot).astype(float).round(6)

逻辑说明

  • 先将所有值转为字符串,确保能处理非字符串类型的输入;
  • 通过正则或字符串截取保留第一个小数点,删除后续所有多余小数点,保证数值格式合法;
  • 转换为float类型后用round(6)统一保留6位小数,与期望结果格式对齐;
  • 两种方法都能适配任意位置的小数点,完全解决固定长度截取的局限性,可高效处理大数据集。

内容的提问来源于stack exchange,提问作者ledzed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:15:59