如何定制dataframe的describe方法返回值的小数点位数?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文继续探讨dataframe
类型的.describe()
方法,经过前面的多篇文章描述,已经得出的结论是:dataframe
类型数据的.describe()
方法,主要针对数字类型的数据进行统计描述,而统计的结果精度值非常高,小数点高达六位数。然而,日常工作中,苏南大叔确不需要这么高的精度,由此引出本文的内容。
大家好,这里是苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程故事。本文测试环境:win10
,python@3.11.0
。本文描述更改dataframe
的.describe()
方法返回结果的精度问题。
标本数据
这里的标本数据依然是鸢尾花数据集,读取方法参考文章:
import pandas as pd
data_url = "http://download.tensorflow.org/data/iris_training.csv"
column_names = ["萼长", "萼宽", "瓣长", "瓣宽", "种类"]
df = pd.read_csv(data_url, header=0, names=column_names)
print( df.describe() )
全局修改pandas
设置display.float_format
核心代码:
import pandas as pd
# ...
pd.set_option('display.float_format',lambda X:'%.2f'% X)
修改的是display.float_format
选项。也可以表述为:
pd.options.display.float_format = "{:.2f}".format
测试代码:
pd.set_option('display.float_format',lambda X:'%.3f'% X)
print(df.describe())
输出:
萼长 萼宽 瓣长 瓣宽 种类
count 120.000 120.000 120.000 120.000 120.000
mean 5.845 3.065 3.739 1.197 1.000
std 0.869 0.427 1.822 0.782 0.840
min 4.400 2.000 1.000 0.100 0.000
25% 5.075 2.800 1.500 0.300 0.000
50% 5.800 3.000 4.400 1.300 1.000
75% 6.425 3.300 5.100 1.800 2.000
max 7.900 4.400 6.900 2.500 2.000
使用.round(小数点位数)
【推荐】
核心代码:
df.describe().round(2)
测试代码:
print( df.describe().round(2) )
print( df.describe().round(3) )
print( df.describe().round(4) )
输出:
萼长 萼宽 瓣长 瓣宽 种类
std 0.87 0.43 1.82 0.78 0.84
min 4.40 2.00 1.00 0.10 0.00
萼长 萼宽 瓣长 瓣宽 种类
std 0.869 0.427 1.822 0.782 0.84
min 4.400 2.000 1.000 0.100 0.00
萼长 萼宽 瓣长 瓣宽 种类
std 0.8686 0.4272 1.8221 0.7820 0.8402
min 4.4000 2.0000 1.0000 0.1000 0.0000
这里发生了一个比较有趣的事情,最后一个“种类”的数据并没有严格遵守代码中的小数点设置。仔细观察的话,就是第二行里面的种类的std
值,当设置为三位的时候,这个值恰好最后一位是0
。于是效果变成了两位小数。
使用.apply(lambda )
这个方案看起来是前两个方案的合体。
核心代码:
df.describe().apply(lambda x: round(x, 2))
或者:
df.describe().apply(lambda series: series.apply(lambda value: f"{value:.2f}"))
结束语
更多python
相关文章,请点击下面的链接查看:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。