数据的计算与格式化
在数据分析中,对数据进行计算以挖掘其内在规律,再通过格式化让结果更清晰易读,都是非常重要的环节。接下来,我们就从常见的数据计算函数、高级的数据计算函数和数据格式化三个方面来详细探讨。
一、常见的数据计算函数
常见的数据计算函数是我们处理数据时的基础工具,能帮助我们快速获取数据的基本统计特征,主要包括求和、求平均值、求最大值和求最小值。
(一)求和 ——sum () 函数
sum () 函数用于对数据进行求和操作,其语法为DataFrame.sum([axis,skipna,level,…])。
- axis 参数:axis=0 表示逐行求和,axis=1 表示逐列求和,默认是逐行。
- skipna 参数:skipna=1 时,NaN 值会自动转换为 0;skipna=0 时,NaN 值不转换,默认是自动转换。
- 该函数返回的是一个 Series 对象,包含一组行或列的小计数据。
比如,我们要计算语文、数学和英语三科的总成绩,就可以使用这个函数。先创建包含三科成绩的数据,然后调用 sum () 函数,就能得到相应的总和。
(二)获取平均值 ——mean () 函数
mean () 函数用于计算数据的平均值,语法为DataFrame.mean([axis,skipna,level,…])。
它的参数和 sum () 函数类似,axis 同样用于指定逐行还是逐列计算,skipna 处理 NaN 值的方式也相同。返回的是行或列的平均值数据,也是一个 Series 对象。
例如,计算语文、数学和英语各科的平均分,只需对包含各科成绩的数据调用 mean () 函数即可。
(三)获取最大值 ——max () 函数
max () 函数能帮我们找到数据中的最大值,语法为DataFrame.max([axis,skipna,level,…])。
- axis=0 表示逐行找最大值,axis=1 表示逐列找最大值,默认是逐列。
- 其他参数的作用和前面的函数一致,返回的是行或列的最大值数据 Series 对象。
想知道语文、数学和英语各科的最高分,用 max () 函数就能轻松实现。
(四)获取最小值 ——min () 函数
min () 函数与 max () 函数相对应,用于获取数据中的最小值,语法为DataFrame.min([axis,skipna,level,…])。
其参数含义和返回值类型都和 max () 函数类似,默认逐行计算,返回行或列的最小值数据 Series 对象。
计算语文、数学和英语各科的最低分,就可以使用这个函数。
二、高级的数据计算函数
除了常见的基础计算函数,还有一些高级的数据计算函数,能让我们更深入地分析数据,包括获取中位数、众数、方差、标准差和分位数。
(一)获取中位数 ——median () 函数
中位数是按顺序排列的一组数据中位于中间位置的数,它不受异常值的影响。比如 7 个年龄数据 22、23、25、28、34、35、45,中位数是 28;8 个年龄数据 22、23、25、27、28、34、35、45,中位数是(27+28)/2=27.5。
median () 函数的语法为DataFrame.median(axis=None,skipna=None,level=None,numeric_only=None,**kwargs)。
- axis=0 表示按行计算,axis=1 表示按列计算。
- skipna 为布尔型,用于设置计算结果是否排除 NaN/Null 值,默认是 True。
- 该函数返回 Series 对象或 DataFrame 对象。
例如,我们可以用它计算学生各科成绩的中位数,无论是 3 条记录还是 4 条记录的情况,都能准确得到结果。
(二)获取数据中的众数 ——mode () 函数
众数是一组数据中出现次数最多的数,代表了数据的一般水平。比如在汉堡的销售数据中,奥尔良鸡腿堡出现的次数最多,那它就是众数。
mode () 函数的语法为DataFrame.mode(axis=0,numeric_only=False,dropna=True)。
- axis=0 或 'index' 时,获取每一列的众数;axis=1 或 'column' 时,获取每一行的众数,默认是 0。
- 它返回的是 DataFrame 对象。
我们可以用它计算学生各科成绩的众数,也能获取每一行的众数或者某一特定科目的众数。
(三)求方差 ——var () 函数
方差用于衡量一组数据的离散程度,是各组数据与它们的平均数的差的平方的平均值。方差越小,数据波动越小,越稳定;反之则波动越大,越不稳定。
var () 函数的语法为DataFrame.var(axis=None,skipna=None,level=None,ddof=1,numeric_only=None,**kwargs)。
- 参数和 median () 函数类似,其中 ddof 是自由度,默认为 1,计算时使用的除数是 N-ddof(N 为元素数量)。
- 返回 Series 对象或 DataFrame 对象。
比如通过计算 “小黑” 和 “小白” 的物理成绩方差,我们可以判断谁的成绩更稳定。
(四)标准差 ——std () 函数
标准差又称均方差,是方差的平方根,同样用于表示数据的离散程度。它的函数std()的参数和var()函数一样。
我们可以用它计算各科成绩的标准差,更直观地了解数据的离散情况。
(五)计算分位数 ——quantile () 函数
分位数以概率为依据将数据分割为几个等份,常用的有中位数(二分位数)、四分位数、百分位数等。
quantile () 函数的语法为DataFrame.quantile(q=0.5,axis=0,numeric_only=True, interpolation='linear')。
- q 默认为 0.5(50% 分位数),值在 0~1 之间。
- interpolation 用于指定插值方法,有线性、较低、较高、最近、中点等。
- 返回 Series 对象或 DataFrame 对象。
例如,根据学生的数学成绩,用该函数计算 35% 的分位数,就能确定需要淘汰的 35% 的学生。它还能计算日期、时间等数据的分位数。
三、数据格式化
数据格式化能让数据的呈现更规范、易读,主要包括设置小数位数、使用百分号和千位分隔符。
(一)设置小数位数 ——round () 函数
round () 函数用于对数据进行四舍五入,保留指定的小数位数,语法为DataFrame.round(decimals=0, *args, **kwargs)。
- decimals 可以是整数、字典或 Series 对象,若为整数,每一列都四舍五入到相同位数;若为字典或 Series,则可对不同列设置不同的小数位数。
比如我们可以将数据统一保留两位小数,也能为不同的列分别设置保留一位或两位小数。
(二)设置百分比 ——apply () 函数与 format () 函数结合
通过 apply () 函数结合 format () 函数,我们可以将数据格式化为百分比形式。
例如,将 A1 列的数据格式化为保留 0 位或两位小数的百分比,也可以使用 map () 函数实现同样的效果。
(三)设置千位分隔符 ——apply () 函数与 format () 函数结合
对于较大的数值,设置千位分隔符能让其更易读。我们可以用 apply () 函数结合 format () 函数来实现,比如将图书销售码洋格式化为带千位分隔符的数据。