如何在Pandas中将统计摘要的Count值转换为整数
解决pandas.describe()统计摘要中Count值无法转为整数显示的问题
你的代码没生效的核心原因是:round(2) 执行后,整个统计摘要DataFrame的列数据类型已经变成了float。即便你把第一行(Count行)转成int,赋值回DataFrame时,会被列的float类型强制转换回float(比如100变成100.0),所以打印时还是会显示小数。
下面给两种可行的解决思路:
思路1:只修改显示格式(推荐,不改变数据本身类型)
这种方法不修改DataFrame的底层数据类型,只是调整打印/展示时的格式,既保留统计数据的数值精度,又让Count显示为整数。
在Jupyter Notebook/IPython中用样式展示:
import pandas as pd # 生成统计摘要并保留两位小数 summary_stats = df.describe().round(2) # 自定义显示格式:Count行显示为整数,其余行保留两位小数 styled_table = summary_stats.style.format( lambda val: f"{val:.0f}" if val.name == "count" else f"{val:.2f}" ) # 展示格式化后的表格 display(styled_table)
在普通Python脚本中打印格式化结果:
import pandas as pd summary_stats = df.describe().round(2) # 按列设置格式化规则,对Count行单独处理 formatted_str = summary_stats.to_string( formatters={ col: lambda x: f"{int(x)}" if x.name == "count" else f"{x:.2f}" for col in summary_stats.columns } ) print(formatted_str)
思路2:修改数据类型(让列支持混合类型)
如果需要从底层数据上把Count行改成整数,可以将DataFrame的列类型转为object,这样就能同时存储整数和float值:
import pandas as pd summary_stats = df.describe().round(2) # 将Count行转为整数 summary_stats.loc["count"] = summary_stats.loc["count"].astype(int) # 把整个DataFrame的列转为object类型,保留混合数据类型 summary_stats = summary_stats.astype(object) print(summary_stats)
这种方法的缺点是,后续对统计数据做数值计算时,可能需要重新转换类型,所以更推荐第一种只调整显示格式的方案。
内容的提问来源于stack exchange,提问作者Dorito0102
相关产品推荐
相关产品推荐

