如何设置Pandas DataFrame浮点数显示为1K/1M/1B可读格式且不修改原值
解决方案
你可以通过自定义数值格式化函数,配合pandas的显示配置实现需求,完全不会改动DataFrame存储的原始数值,也不需要额外新增列。
方法1:全局生效配置(所有DataFrame显示都遵循该格式)
先定义可读数值格式化函数,再赋值给pandas全局显示参数即可:
import pandas as pd def human_readable_format(num): units = [ (1e12, 'T'), (1e9, 'B'), (1e6, 'M'), (1e3, 'K'), (1, '') ] for threshold, unit in units: if abs(num) >= threshold: # 保留2位小数,可按需调整小数位数 return f"{num / threshold:.2f}{unit}" return f"{num:.2f}" # 配置全局显示格式 pd.options.display.float_format = human_readable_format
测试你提供的示例DataFrame,输出效果如下:
0 0 10.00 1 100.00 2 1.00K 3 10.00K 4 100.00K 5 1.00M 6 10.00M 7 100.00M 8 1.00B 9 10.00B
如果后续需要恢复默认显示格式,执行pd.reset_option('display.float_format')即可。
方法2:单表临时生效(仅当前DataFrame显示生效,不影响全局配置)
如果你不想修改全局配置,只需要给单个DataFrame设置显示样式即可:
# 示例DataFrame df = pd.DataFrame([10.,100.,1000.,10000.,100000.,1000000.,10000000.,100000000.,1000000000.,10000000000.]) # 应用格式化显示 df.style.format(human_readable_format)
该方法仅修改当前DataFrame的渲染显示效果,原始数值完全不变,不影响后续任何计算逻辑。
内容的提问来源于stack exchange,提问作者Veki
相关产品推荐
相关产品推荐

