【问题标题】: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

【问题讨论】:

    标签: python pandas dataframe format scientific-notation


    【解决方案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 的答案。
      猜你喜欢
      • 1970-01-01
      • 2019-06-20
      • 2019-08-08
      • 1970-01-01
      • 2021-03-12
      • 2020-06-07
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多