如何在不舍入的情况下将值修剪到点后的两个位置,python

2024-04-20 01:15:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种最快的方法来获取我的列中每个点后面只有两个数字的值,而不使用round()

pd.Series:

输入:

1.42345
12.33444
111.66777
2.059999

预期产量:

1.42
12.33
111.66
2.05

我想把它转换成字符串,然后使用slice但是在slice中我需要使用start和stop选项,当前面的数字长度不同时,这很难。你知道吗

如果没有其他选择,我将使用.str.extract(r'([0-9]{1,5}.[0-9]{2})'),但也许有?显示浮动而不舍入的一些限制?你知道吗

它不是重复的主题,这个主题的解决方案是舍入值:Truncate to three decimals in Python


Tags: 方法字符串主题选项extractslice数字解决方案
3条回答

一种方法是将^{}除以0.01,然后再将值除以100

s.floordiv(0.01).div(100)

0      1.42
1     12.33
2    111.66
3      2.05
dtype: float64

它的性能明显优于转换为字符串并提取到小数点后第二位:

s = pd.Series(np.random.randn(1_000_000))

%timeit s.astype(str).str.extract(r'(\d+\.\d{2})')
# 1.76 s ± 42.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit s.floordiv(0.01).div(100)
# 42.1 ms ± 3.08 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit s//0.01/100
# 40.5 ms ± 3.31 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

有新的格式规范,字符串格式Specification Mini-Language

您可以执行以下操作:

"{0:.2f}".format(1.42345) // output 1.42

注意上面返回一个字符串。为了得到float,只需用float(…)换行:

float("{0:.2f}".format(1.42345)) // output 1.42

楼层分区

s//0.01/100
0      1.42
1     12.33
2    111.66
3      2.05
Name: dol, dtype: float64

相关问题 更多 >