如何将Pandas DataFrame的Volume列数值转为带M后缀的百万单位格式
Pandas DataFrame 调整Volume列大数值为M后缀展示的方法
实现逻辑
要达到示例里58792000.0显示为58.792M的效果,换算关系很直接:1M对应100万,把原列数值除以1e6,保留3位小数后拼接M后缀就行。优先用展示层做格式化,别把原列的数值改成字符串,不然后面算均值、筛数据、画图的时候容易出问题。
具体操作
- 先写个处理单个数值的转换函数
import pandas as pd def format_volume(val): # 遇到空值直接返回,避免报错 if pd.isna(val): return val return f"{val / 1e6:.3f}M" - 按场景选应用方式
- 只是看着舒服、原数值要留着做计算的话(最常用):用pandas自带的
style.format配置,不会动原列的内容df.style.format({"Volume": format_volume}) - 需要单独存一份格式化好的字符串列的话:用
apply逐行转df["Volume_show"] = df["Volume"].apply(format_volume)
- 只是看着舒服、原数值要留着做计算的话(最常用):用pandas自带的
通用扩展
要是之后还要处理更小的千级数值、更大的十亿级数值,就把转换函数改成自动匹配量级的版本,不用每次手动除以对应的换算值:
def format_big_num(val): if pd.isna(val): return val abs_val = abs(val) if abs_val >= 1e9: return f"{val / 1e9:.3f}B" elif abs_val >= 1e6: return f"{val / 1e6:.3f}M" elif abs_val >= 1e3: return f"{val / 1e3:.3f}K" else: return f"{val:.3f}"
踩坑提醒
- 别直接把转换后的字符串值覆盖回原
Volume列,一旦列类型从浮点变成字符串,后续做数值运算全要报错 - 要改小数位数很简单,把格式化字符串里的
.3f改成对应数字就行,比如要2位小数就写成.2f
内容的提问来源于stack exchange,提问作者betanoox
相关产品推荐
相关产品推荐

