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

如何仅为DataFrame中一位小数的数值补末尾零(不修改整数)

解决方法

要实现仅对DataFrame列中仅含一位小数的数值补充末尾零,同时保留整数(包括浮点数形式的整数如1.0)和多位小数数值的原样,可以用以下两种方法:

方法一:自定义函数结合apply

编写自定义逻辑区分数值类型,针对性格式化:

import pandas as pd

# 初始化示例DataFrame
df = pd.DataFrame(data=[[0.3, 0.3], [0.5, 1], [0.400, 0.4], [0.2, 5],[1.2, 1.55]],
    columns=['credit', 'min_credit'])

def format_decimal(num):
    # 判断是否为整数(兼容浮点数形式的整数,如1.0)
    if num == int(num):
        return str(int(num))
    # 转换为字符串处理小数部分
    num_str = str(num)
    if '.' in num_str:
        # 去除末尾无效零后,判断有效小数位数
        decimal_part = num_str.split('.')[1].rstrip('0')
        if len(decimal_part) == 1:
            return '{:.2f}'.format(num)
        else:
            # 去除末尾无效零和多余小数点
            return num_str.rstrip('0').rstrip('.')
    return num_str

# 应用到目标列
df['min_credit'] = df['min_credit'].apply(format_decimal)

执行后得到的结果:

creditmin_credit
0.30.30
0.51
0.4000.40
0.25
1.21.55

方法二:正则表达式批量替换

通过正则匹配目标格式,批量替换更简洁:

import pandas as pd
import re

df['min_credit'] = df['min_credit'].astype(str).replace(
    # 匹配仅一位有效小数的数值,补零为两位
    r'^(\d+\.\d)0*$', r'\10', regex=True
).replace(
    # 匹配浮点数形式的整数,转为纯整数字符串
    r'^(\d+)\.0*$', r'\1', regex=True
)

补充说明

  • 上述方法会将目标列转为字符串类型,若仅需显示层面的格式调整(不修改存储类型),可设置全局显示格式:
    pd.options.display.float_format = lambda x: '{:.2f}'.format(x) 
    if (x != int(x) and len(str(x).split('.')[1].rstrip('0')) == 1) 
    else str(int(x)) if x == int(x) else str(x)
    
    此设置会影响所有DataFrame的浮点数显示效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:50:44