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

如何在Python/Pandas中保留两位小数且不进行四舍五入?

Pandas Series保留两位小数且不四舍五入的实现方案

针对你需要处理的float64类型经纬度Series,要保留两位小数且不四舍五入,这里提供几种靠谱的实现方法:

方法1:结合numpy的sign和floor处理(推荐)

因为涉及负数,直接用floor会导致数值被"向下取整"(比如-74.002会被floor成-74.01),所以需要先取绝对值处理,再恢复符号:

import pandas as pd
import numpy as np

series = pd.Series([-74.002568, -74.003085, -74.003546])
# 缩放100倍后取绝对值的floor,再恢复符号并缩放回原比例
truncated_series = np.sign(series) * np.floor(np.abs(series) * 100) / 100
# 可选:强制显示两位小数(避免因浮点精度问题显示成-74.0)
truncated_series = truncated_series.round(2)

print(truncated_series)

输出结果:

0   -74.00
1   -74.00
2   -74.00
dtype: float64

方法2:使用math.trunc结合apply

利用math.trunc直接截断整数部分的特性,先把数值放大100倍截断,再缩小回原比例:

import pandas as pd
import math

series = pd.Series([-74.002568, -74.003085, -74.003546])
truncated_series = series.apply(lambda x: math.trunc(x * 100) / 100)
# 强制显示两位小数
truncated_series = truncated_series.map("{:.2f}".format).astype(float)

print(truncated_series)

方法3:自定义截断函数

如果需要更清晰的逻辑,可以写一个自定义函数处理每个元素:

import pandas as pd

def truncate_two_decimals(x):
    # 处理符号
    sign = 1 if x >= 0 else -1
    # 放大100倍后取整截断,再缩小回原比例
    truncated_val = int(abs(x) * 100) / 100
    return sign * truncated_val

series = pd.Series([-74.002568, -74.003085, -74.003546])
truncated_series = series.apply(truncate_two_decimals)
# 确保显示两位小数
truncated_series = truncated_series.round(2)

print(truncated_series)

为什么你之前的方法没生效?

  • round():默认会执行四舍五入,不符合"不进位"的要求;
  • trunc():默认是截断所有小数位,无法指定保留两位;
  • for循环没修改数据:大概率是遍历Series时修改的是元素副本,没有将结果赋值回原Series或者新变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:25:37