提问人:sdbbs 提问时间:1/30/2022 更新时间:1/30/2022 访问量:1098
控制浮点小数的打印输出,在 Pandas DataFrame 中使用小数。小数点后条目?
Control printout of floating point decimals, in Pandas DataFrame with decimal.Decimal entries?
问:
请看这个例子:
import pandas as pd
from decimal import Decimal
my_df = pd.DataFrame(columns=["a", "b", "c"])
my_df = my_df.append({'a': 1, 'b': 3.0/7, 'c': Decimal(3.0/7)}, ignore_index=True)
print(my_df)
print("-------")
with pd.option_context('float_format', '{:.4f}'.format, 'display.expand_frame_repr', False):
print(my_df)
这将打印出:
a b c
0 1 0.428571 0.42857142857142854763807804374664556235074996...
-------
a b c
0 1 0.4286 0.42857142857142854763807804374664556235074996...
意识到可以在 Pandas DataFrame 中控制浮点数中小数点数的打印输出,我尝试将相同的方法应用于元素,该元素是类的。如测试代码打印输出所示:pd.option_context('float_format',...
decimal.Decimal
- 如预期的那样,浮点打印输出已从 到 截断
0.428571
0.4286
- 但是,Decimal 对象仍然打印有大量小数
我想在我的 Pandas DataFrame 中保留 Decimal 对象,但是在某些时候,我想用更少、有限数量的小数来打印它们 - 就像浮点数一样。with pd.option_context('float_format',...
在 Pandas DataFrame 中,这种受控的 Decimal 的“截断/四舍五入打印输出”是否可行 - 如果是这样,如何才能做到?
答:
3赞
Richard K Yu
1/30/2022
#1
我相信您可以做到这一点的一种方法是更改与 decimal 对象关联的上下文并使用小数重新计算列。
请注意,这似乎只有在 Decimal 的计算方式为 时才有效。但是,如果你的小数很复杂,我认为你可以通过对列中的每个小数对象进行处理来解决这个问题,而不是一个接一个地考虑每个分母。Decimal(3.0) / Decimal(7)
Decimal(x/y)/Decimal(1)
我修改后的代码如下所示:
import pandas as pd
from decimal import *
my_df = pd.DataFrame(columns=["a", "b", "c"])
my_df = my_df.append({'a': 1, 'b': 3.0/7, 'c': Decimal(3.0)/Decimal(7)}, ignore_index=True)
print(my_df)
print("-------")
#We change the precision and then reinitialize the ['c'] column with the same decimal objects.
getcontext().prec = 4
my_df['c'] = [Decimal(3.0)/Decimal(7)]
with pd.option_context('float_format', '{:.4f}'.format, 'display.expand_frame_repr', False):
print(my_df)
输出:
a b c
0 1 0.428571 0.4285714285714285714285714286
-------
a b c
0 1 0.4286 0.4286
评论