1、简单统计函数
mean() | 计算数据平均值 |
median() | 计算数据的中位数 |
sum() | 计算数据的总和 |
min() | 找到数据的最小值 |
max() | 找到数据的最小值 |
std() | 计算数据标准差 |
var() | 计算数据方差 |
count() | 计算非缺失值的数量 |
quantile() | 计算数据的分位数 |
describe() | 生成统计信息(计数、均值、标准差、最小值、25%分位数、中位数、75%分位数、最大值) |
value_counts() | 计算每一个唯一值出现的频次 |
idxmin() | 找到最小值的索引位置 |
idxmax() | 找到最大值的索引位置 |
我们先用random制造一个10*3的数据并导出成csv后,一一尝试函数。
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randint(0,150,size=(10,3)),
index=list('ABCDEFGHIJ'),
columns=['math','python','english'],
dtype=np.int64
)
df.to_csv('test.csv',index=False)
print(df)
mean() 求平均值
语法:DataFrame.mean(axis=0, skipna=True, numeric_only=False, **kwargs)
返回值:
Series or scalar
- 输入的数据是单行或单列,则返回
scalar
;- 输入的数据是多行或多列,则返回
Series
。参数:
- axis: Axis | None = 0, 计算方向,默认为0
0:计算每一列,
1:计算每一行
None: 计算所有值的平均值,这相当于把
DataFrame
的所有值展平后求平均值:df.mean(axis=None) 等效于 mean(df.values.raravel())
- skipna: bool = True 忽略确实值,默认为true
- numeric_only: bool = False, 排除非纯数值的行或列
- **kwargs 关键字参数,一般不需要传递任何内容。是为了保持与
Numpy
的兼容性而保留的参数
print(df.mean(axis=1).round(2))#round(2)表示保留两位小数字
print(df.mean())
median() 求中位数
参数同mean
print(df.median())
print(df.median(axis=1))
sum() 求总值
参数
- numeric_only:指定在求和的过程中有效值的最小个数。可防止由于 NaN 值的存在而导致的结果不准确。
- numeric_only:指定是否只对数值型的列进行操作;
- mean中4个参数
print(df.sum())
print(df.sum(axis=1))
min() 找最小值 max()找最大值
参数
- axis: Axis | None = 0,
- skipna: bool = True,
- numeric_only: bool = False,
- **kwargs,
print(df.min())
print(df.min(axis=1))
std() 计算标准差 var() 计算方差
参数
- axis: Axis | None = 0,
- skipna: bool = True,
- numeric_only: bool = False,
- **kwargs,
- ddof:int = 1, 自由度修正
Pandas.DataFrame.var() 方差 详解 含代码 含测试数据集 随Pandas版本持续更新_dataframe 方差-CSDN博客
count() 统计非缺失数
参数只有:axis和numeric_only
quantile() 求数据分位数
【Pandas】深入解析pandas中的统计汇总函数`quantile()`_pandas quantile-CSDN博客
describe() 生成统计信息
参数:
- percentiles=None,可以设定数值型特征的统计量,默认是[.25, .5, .75],也就是返回25%,50%,75%数据量时的数字,但可以修改的
- include=None,默认是只计算数值型特征的统计量,当输入include=['O'],会计算离散型变量的统计特征
- exclude=None,
print(df.describe(percentiles=[0.2,0.6,0.8]).round(2))
# print(df.describe(include=['O']))
value_count()
df.loc[1,'python']=147#赋一个相同值
print(df.value_counts())
print(df['python'].value_counts())#只对python字段统计
可以看出,使用df.value_counts()时,是对一行的每一列数据都进行比较。
2、复杂统计函数
cumsum() | 计算数据的累计和 |
cummax() | 计算数据的累计最大值 |
cummin() | 计算数据的累计最小值 |
cumprod() | 计算数据的累计乘积 |
diff() | 计算数据之间的差分 |
pct_change() | 计算数据的百分比变化 |
cumsum()、cummin()、cummax()、cumprod() 参数:
- axis: Axis | None = None 计算方向,同上
- skipna: bool = True 忽略确实值,默认为true
- *args
- **kwargs
2.1 cumsum() 计算数据的累计和
cumsum()函数是pandas库中Series和DataFrame对象的一个方法,用于计算数据的累积和。对于Series对象,它返回一个新的Series,其中每个元素是原始Series中该元素及其之前所有元素的和。对于DataFrame对象,cumsum()会沿着指定的轴(默认为0,即行方向)计算累积和。
import pandas as pd
import numpy as np
df=pd.DataFrame(data=[30,60,10,40,20],columns=['A'],
dtype=np.int64)
print(df)
print(df.cumsum())
其就是计算每一行的累加和,(将其看成5个表,每一行与前面的行看成一个新的表,计算累加值。该函数和后面三个函数是一样的)是一个很实用的函数,其解决数据分析需求以及可视化分析时帮助很大。
可能遇到的问题及解决办法
- 数据类型问题:如果数据中包含非数值类型(如字符串、日期等),cumsum()函数将无法正常工作。解决办法是确保数据为数值类型,或者在应用cumsum()之前对数据进行清洗和转换。
- 缺失值问题:如果数据中存在缺失值(NaN),cumsum()函数会将其视为0进行计算。这可能会导致累积结果不准确。解决办法是在应用cumsum()之前对缺失值进行处理,比如使用填充(fillna())、删除(dropna())或插值(interpolate())等方法。
- 轴选择问题:在DataFrame对象中使用cumsum()时,可以通过设置axis参数来选择沿着行方向(axis=0)或列方向(axis=1)计算累积和。确保根据你的需求选择合适的轴。
学习链接:【Pandas】深入解析pandas中的统计汇总函数`cumsum()`_pandas cumsum-CSDN博客
2.2 cummin()计算数据的累计最小值
print(df.cummin())
2.3 cummax()计算数据的累计最大值
print(df.cummax())
2.4 cumprod()计算数据的累计乘积
print(df.cumprod())
2.5 diff() 计算差分
差分就是该行数据与上一行数据的差值(所以返回值的第一行数据为NaN),这对与分析数据有很大的作用。
在该函数中,添加了一个periods(默认为1,可修改)参数,其用来指定计算差分的步长。
加入传递的periods=2,则第一、第二行数据为NaN,第三行与第一行做差,第四行与第二行做差,第五行与第三行做差,使用上述数据运行结果为:NaN,NaN,-20、-20、10
df['diff_1']=df.diff()#默认periods=1
df['diff_2']=df['A'].diff(periods=2)
print(df)
2.6 pct_change() 计算百分比变化
该方法与diff()一样,也有一个periods参数,默认为1,其就是(df.iloc[i+1]-df.iloc[i])/df.iloc[i]
df['pct_1']=df.pct_change()
df['pct_2']=df['A'].pct_change(periods=2)
print(df)
3、相关性分析函数
3.1cov()函数:计算协方差
- DataFrame使用方式: DataFrame.cov(min_periods=1)
- Series使用方式:Series.cov(other_Series,min_periods=1)
min_periods 参数用于指定计算协方差时至少需要有多少个非空值。默认值是 1,表示只要有一个非空值,就进行计算。
3.2corr()函数:计算相关性系数
- DataFrame 使用方式:DataFrame.corr(method='pearson', min_periods=1)
- Series 使用方式:Series.corr(other_Series, method='pearson', min_periods=1)
method 参数用于指定计算相关性系数的方法。常用的方法有:
- 'pearson':皮尔逊相关系数,用于测量线性关系。
- 'kendall':肯德尔相关系数,用于测量有序分类变量之间的相关性
- 'spearman':斯皮尔曼相关系数,用于测量有序分类变量之间的相关性
协方差和相关性系数在实际数据分析中有很多用途,它们可以帮助我们理解数据中变量之间的关系、发现相关性,并进行相关的统计分析。以下是它们在实际数据分析中的常见用途:
- 线性关系探索;相关性系数(特别是皮尔逊相关系数)用于衡量两个连续变量之间的线性关系强度和方向。它能够告诉我们,当一个变量增加时,另一个变量是如何变化的,是否存在正相关(一个变量增加,另一个也增加)、负相关(一个变量增加,另一个减少)或者几乎没有相关性。
- 特征选择;在机器学习和数据建模中,可以使用相关性系数来帮助选择与目标变量高度相关的特征。相关性较高的特征通常具有更强的预测能力,因此可以用于构建更有效的模型。
- 多变量分析:协方差矩阵和相关矩阵是多变量分析的重要工具。它们可以帮助我们理解多个变量之间的相互关系,是否存在多个变量同时变化的模式。
- 数据预处理:在数据清洗和预处理阶段,可以使用协方差来检査两个变量之间是否存在异常的关系。例如,两个变量之间出现异常的协方差可能是由于数据录入错误或者数据采集问题。
- 变量相关性分析:通过计算变量之间的相关性,可以发现数据集中隐藏的关联规律,帮助做出更有意义的数据解释和决策。
- 时间序列分析:在时间序列数据分析中,协方差和相关性系数用于衡量不同时点之间的变量关联性,帮助发现趋势和周期性
import pandas as pd
import numpy as np
data={
'销售额':[100,150,200,250,300],
'广告费用':[10,20,30,40,50],
'利润':[22,31,20,50,61]
}
df=pd.DataFrame(data)
cov_matix=df.cov(min_periods=1)
print(cov_matix)
print("广告费用对销售额的协方差")
print(df['销售额'].cov(df['广告费用']))
corr=df.corr()
print(corr.round(2))#相关性系数的取值为 [-1,1])