如何在 Pandas DataFrame 中格式化数值为带千位分隔符的整数

12次阅读

如何在 Pandas DataFrame 中格式化数值为带千位分隔符的整数

本文介绍多种在 pandas 中将数值列格式化为“整数+千位逗号”(如 `1000` → `”1,000″`)的方法,涵盖显示控制、原地转换及导出时格式化,兼顾 pandas 版本兼容性与实际使用场景。

数据分析与报表输出中,常需将浮点型数值以易读的整数加千位分隔符形式展示(如 1000.2 → “1,000”),但又不改变底层数据类型。Pandas 提供了灵活的多层级解决方案:从仅影响显示效果,到永久转换为字符串格式,再到导出时动态格式化。以下按使用场景分类说明。

✅ 方法一:仅修改显示格式(推荐用于临时查看)

适用于调试、jupyter Notebook 输出等无需修改原始数据的场景。通过 pd.set_option() 或上下文管理器设置全局/临时浮点数显示格式:

import pandas as pd  df = pd.DataFrame({     'Header': ['L1', 'L2', 'L3'],     'Val1': [1000.2, 2000.40, 300.55],     'Val2': [4000.3, 500.00, 60000.55] })  # 方式1:临时生效(推荐,避免污染全局设置) with pd.option_context('display.float_format', '{:,.0f}'.format):     print(df)  # 方式2:当前会话全局生效(谨慎使用) # pd.set_option('display.float_format', '{:,.0f}'.format) # print(df)

⚠️ 注意:此方法不改变数据类型(仍为 float64),仅影响 print()、Jupyter 输出等显示行为;导出 csv/excel 时仍保留原始浮点值。

✅ 方法二:永久转换为带格式的字符串(适用于导出或前端展示)

若需生成最终可导出的字符串型 DataFrame(如生成 html 表格、发送邮件、对接前端),应显式转换数值列为格式化字符串:

# 仅对数值列操作,避免影响非数值列(如 'Header') numeric_cols = df.select_dtypes(include='number').columns df[numeric_cols] = df[numeric_cols].map(lambda x: f'{x:,.0f}') print(df)

? 版本兼容提示

  • Pandas ≥ 2.1.0:使用 .map()(推荐)
  • Pandas applymap()(已弃用,仅作兼容参考)

该方式将 Val1 和 Val2 列转为 Object 类型的字符串,结果为:

Header   Val1    Val2 0     L1  1,000   4,000 1     L2  2,000     500 2     L3    301  60,001

✅ 方法三:导出时按需格式化(零侵入、高灵活性)

当需生成 markdown、LaTeX 或纯文本报告时,可利用 Pandas 内置导出方法的 float_format 参数,完全不修改原始 DataFrame

# 导出为 Markdown 表格(支持 gitHub/gitlab 渲染) print(df.to_markdown(floatfmt=",.0f"))  # 导出为对齐文本(适合日志或终端打印) print(df.to_string(float_format='{:,.0f}'.format))  # 导出为 LaTeX 表格(学术论文常用) print(df.to_latex(float_format='{:,.0f}'.format))

? 总结与选型建议

场景 推荐方法 是否修改原始数据 典型用途
快速查看/调试 pd.option_context(‘display.float_format’, …) ❌ 否 Jupyter、ide 控制台
生成最终展示表 df[numeric_cols].map(…) ✅ 是(转为字符串) HTML 页面、邮件正文、API 响应
导出结构化文档 df.to_markdown(…) / to_string(…) ❌ 否 报告生成、自动化文档、论文插图

? 小技巧:若需四舍五入后再格式化(如 300.55 → “301”),{:.0f} 格式符已自动实现;若需向下取整,可先用 df.round(0).astype(int) 预处理。

text=ZqhQzanResources