将序列四舍五入为 N 位有效数字

Gin*_*aze 8 python math rounding pandas

我有一个浮点数数据框,我需要创建一个函数,该函数将采用一列并将所有值四舍五入为 N 个有效数字

所以该列可能看起来像这样:

123.949
23.87 
1.9865
0.0129500
Run Code Online (Sandbox Code Playgroud)

如果我想四舍五入到 3 个有效数字,我会将列和 3 传递给函数来得到这个

124.0
23.9
1.99
0.013
Run Code Online (Sandbox Code Playgroud)

如何在不循环列的情况下有效地完成此操作?

我有一个方程可以计算一个数字的有效数字

round(x, N-int(floor(log10(abs(x))))
Run Code Online (Sandbox Code Playgroud)

但它不适用于系列或数据框

iDr*_*ish 4

您可以使用pandas.Series.apply它跨轴(列或行)逐元素实现函数:

df.col.apply(lambda x: round(x, N - int(floor(log10(abs(x))))))
Run Code Online (Sandbox Code Playgroud)

请注意,您不能真正pandas.DataFrame.apply在此处使用,因为舍入函数应该是元素方面的,而不是在整个轴上。

区别在于您的函数输入不是float获取array.

另一种选择是applymap在整个pandas.DataFrame.

df.applymap(lambda x: round(x, N - int(floor(log10(abs(x))))))
Run Code Online (Sandbox Code Playgroud)