如何格式化熊猫数据框并保留原始浮点精度值

Posted

技术标签:

【中文标题】如何格式化熊猫数据框并保留原始浮点精度值【英文标题】:How to format a pandas dataframe and keep original float precision values 【发布时间】:2021-09-29 13:37:56 【问题描述】:

我使用 pandas 数据帧来加载接收到的有效载荷,当格式化时,它没有按照我的意愿格式化,我的代码示例:

import pandas as pd

df = pd.DataFrame(['A': 2.5e-07, 'B': 2.5e-05, 'C': 2.5e-04, 'D': 0.0001, 'E': 0.01])

pd.options.display.float_format = ':f'.format
print(df.to_string())

pd.set_option('display.float_format', str)
print(df.to_string())

输出:

         A        B        C        D        E
0 0.000000 0.000025 0.000250 0.000100 0.010000

        A       B       C      D    E
0 2.5e-07 2.5e-05 0.00025 0.0001 0.01

我想得到什么:

        A       B       C      D    E
0 0.0000025 0.000025 0.00025 0.0001 0.01

【问题讨论】:

【参考方案1】:

我们可以使用np.format_float_positional:

import numpy as np
import pandas as pd

pd.set_option('display.float_format', np.format_float_positional)

df = pd.DataFrame([
    'A': 2.5e-07, 'B': 2.5e-05, 'C': 2.5e-04, 'D': 0.0001, 'E': 0.01
])

print(df.to_string())

或者使用option_context

import numpy as np
import pandas as pd

df = pd.DataFrame([
    'A': 2.5e-07, 'B': 2.5e-05, 'C': 2.5e-04, 'D': 0.0001, 'E': 0.01
])

with pd.option_context('display.float_format', np.format_float_positional):
    print(df.to_string())

两者都产生:

           A        B       C      D    E
0 0.00000025 0.000025 0.00025 0.0001 0.01

【讨论】:

【参考方案2】:

您可以更改浮点小数位数,但这适用于所有值。

In [61]: df = pd.DataFrame(['A': 2.5e-07, 'B': 2.5e-05, 'C': 2.5e-04, 'D': 0.0001, 'E': 0.01])

In [62]: formats = "A": ":,.8f","B": ":,.6f", "C": ":,.5f", "D": ":,.4f", "E": ":,.2f"

In [63]: for col, f in formats.items():
    ...:     df[col] = df[col].map(lambda x: f.format(x))
    ...: 

In [64]: df
Out[64]: 
            A         B        C       D     E
0  0.00000025  0.000025  0.00025  0.0001  0.01

【讨论】:

那是问题,我想应用格式但不影响所有字段,换句话说,保持每个字段的精确精度 @Leo 检查更新的答案。 你的答案解决了问题,但是字段的格式是固定的,实际上,浮点数可以有几个小数位 @Leo 是的,它是硬编码的,我建议你使用 Henry Ecker 的答案。

以上是关于如何格式化熊猫数据框并保留原始浮点精度值的主要内容,如果未能解决你的问题,请参考以下文章

如何舍入仅用于在熊猫中显示的值,同时在数据框中保留原始值?

精度浮点型数据精确到了几位小数呢?

如何获取熊猫数据框中的行,列中具有最大值并保留原始索引?

如何将列表中的值分配给熊猫数据框并控制每个列表元素在数据框中的分布/频率

c语言如何控制小数位数?

c语言如何控制小数位数