如何将DataFrame中的数字格式化为带逗号的整数?遇报错求解决
解决Pandas DataFrame数值千分位格式化问题
错误原因
你遇到的int() argument must be string, a bytes-like object or a number, not 'DataFrame'错误,是因为直接将整个DataFrame对象传入int()函数,而int()只能处理单个数值或字符串,无法直接处理整个DataFrame结构。
解决方案
要实现先四舍五入取整,再添加千分位逗号的效果,可按以下步骤处理:
- 对目标数值列执行四舍五入取整操作
- 将取整后的数值格式化为带千分位逗号的字符串
完整代码如下:
import pandas as pd # 初始化数据 data1 = {'Header':['L1','L2','L3'], 'Val1':[float(1000.2),float(2000.40),float(300.55)], 'Val2':[float(4000.3),float(500.00),float(60000.55)]} df = pd.DataFrame(data1) # 1. 对数值列四舍五入取整 numeric_cols = ['Val1', 'Val2'] df[numeric_cols] = df[numeric_cols].round().astype(int) # 2. 格式化为带千分位逗号的字符串 df[numeric_cols] = df[numeric_cols].applymap(lambda x: f"{x:,}") # 输出符合要求的表格 print(df.to_markdown(index=False))
最终输出
| Header | Val1 | Val2 | |--------|--------|---------| | L1 | 1,000 | 4,000 | | L2 | 2,000 | 500 | | L3 | 301 | 60,001 |
补充说明
- 若无需四舍五入、仅需截断小数部分,可将
round().astype(int)替换为astype(int),但此操作会直接丢弃小数(如300.9会变为300,不符合你的期望输出) applymap()可对DataFrame的每个元素应用格式化逻辑,适合多列批量处理f"{x:,}"是Python内置的格式化语法,专门用于为整数添加千分位分隔符
内容的提问来源于stack exchange,提问作者Add
相关产品推荐
相关产品推荐

