Python 如何通过单个操作截断数据帧的系列/列

Python 如何通过单个操作截断数据帧的系列/列,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,有一些操作可以使数据框的列/系列变圆、变底或变顶,但是如何指定列的精度并截断其余的值呢 df = pd.DataFrame({"a": (1.21233123, 1.2412304498), 'b':(2.11296876, 2.09870989)}) 给定这个简单的数据帧,假设我想在不舍入的情况下将a列和b列的精度截断为3,我只想去掉其余的精度 df = pd.DataFrame({"a": (1.212, 1.241), 'b':(2.112, 2.098)}) 这将是一个结果df,应

有一些操作可以使数据框的列/系列变圆、变底或变顶,但是如何指定列的精度并截断其余的值呢

df = pd.DataFrame({"a": (1.21233123, 1.2412304498), 'b':(2.11296876, 2.09870989)})
给定这个简单的数据帧,假设我想在不舍入的情况下将a列和b列的精度截断为3,我只想去掉其余的精度

 df = pd.DataFrame({"a": (1.212, 1.241), 'b':(2.112, 2.098)})
这将是一个结果df,应该有一个可以执行的列操作,但似乎您只能指定舍入精度。

您可以使用:

要“四舍五入”,您可以先从数据帧中减去
0.001/2

In [12]: (df - 0.0005).round(3)
Out[12]:
       a      b
0  1.212  2.112
1  1.241  2.098

使用
numpy.trunc
时需要一些技巧:

import numpy as np

n_precision = 3
df = np.trunc(df * (10 ** n_precision))/ (10 ** n_precision)
print(df)

       a      b
0  1.212  2.112
1  1.241  2.098

由于
np.trunc
丢弃了小数部分,您首先将数字乘以精度的顺序,然后再将它们除以以获得所需的输出。

除了舍入之外还有什么?关于
df.round(3)
?它不是舍入,如果我把这个系列四舍五入,你可以在下面安迪·海登的答案中看到,你得到的是2.099而不是2.098。我不想取整,只是限制列的精度。您可以尝试numpy.trunc(),因为在答案中必须使用Yes truncate,但如@Chris answer中所示,必须对truncate进行操作才能获得特定精度的解决方案。参考我的示例输出,取整不起作用,我不想四舍五入,我只想以指定的精度截断整个系列的值。我不确定我是否理解这是如何等效的,因为生成的数据帧是完全不同的?得到的df在b1时的值为1.599是的,确实有效,但这不应该是截断的解决方案,它似乎不能在一系列的不同值上重复。例如,当减去0.0005时,如果有任何数字会改变小数点之前的值,则四舍五入将是错误的。“它似乎无法在一个系列的不同值上复制。”请提供一个例子。我的错误,涵盖了我目前能想到的任何情况。谢谢有趣的是,这是一种与@AndyHayden类似的方法,因为没有直接的函数来实现这一点,它必须由其他现有函数设计,即使在NumPy的trunc函数中也是如此。谢谢你的提示!
import numpy as np

n_precision = 3
df = np.trunc(df * (10 ** n_precision))/ (10 ** n_precision)
print(df)

       a      b
0  1.212  2.112
1  1.241  2.098