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