Pandas数据分析04——数据信息统计

 参考书目:《深入浅出Pandas:利用Python进行数据处理与分析》


pandas做简单的描述性统计是很方便的,计算各种简单的统计量,平均值,方差,中位数什么的一般一两天命令就能解决。

import pandas as pd 
import numpy as np
df = pd.read_excel('https://www.gairuo.com/file/data/team.xlsx')
s = df.Q1 # 取其中一列,形成 Series
df.head() # 查看前五条数据

数据信息 

df.head(10) # 查看前10条数据
df.tail() # 查看后五条数据
df.tail(10) # 查看后10条数据
df.sample() # 随机查看一条数据
df.sample(3) # 随机查看3条数据
df.sample(10, random_state=0).reset_index(drop=True) # 随机后重置索引
df.shape  # (100, 6),共 100 行,6列 (索引不算)
s.shape    # (100,) Series 只有一个值
df.info() ##基本信息
df.dtypes ##数据类型,如果是 Series 需要用 s.dtype
df.axes   ## 行列索引内容 df.axes

 索引对象

df.index      # RangeIndex(start=0, stop=100, step=1)
df.columns   # 列索引,Series 不支持
df.values   # 建议使用 to_numpy()
df.to_numpy() # numpy array(<所有值的列表矩阵>)
df.ndim  # 2 维度数
df.size  # 600 行x列的总数,就是总共有多少数据
# 是否为空,注意有空值不认为是空
df.empty   # False
dfs.keys() # Series 的索引, DataFrame 的列名
df.first_valid_index() # 0  # 返回第一个非NA/空值的索引
df.last_valid_index()  # 99  # 返回最后一个非NA/空值的索引

 数据的标记信息

df.flags   # 数据的标记信息(目前只支持是否重复标签)pd 1.2.0+
# <Flags(allows_duplicate_labels=True)>
df.attrs={'info': '学生成绩表'}  # 设置元信息,可用于数据基础信息描述
df.attrs # # 查看元信息  {'info': '学生成绩表'}
# 标签是否允许重复
df.flags["allows_duplicate_labels"]
df.flags.allows_duplicate_labels             # True
df.set_flags(allows_duplicate_labels=False) # 设置
##Series 独有的如下
s.name # 'Q1'
s.array # 值组成的数组 <PandasArray>
s.dtype # 类型,dtype('int64')
s.hasnans # False 是否有空

描述统计

df.describe()
pd.Series(['a', 'b', 'c', 'c']).describe()
s2 = pd.Series([np.datetime64("2000-01-01"),np.datetime64("2010-01-01"),
                np.datetime64("2010-02-01")])
s2.describe(datetime_is_numeric=True)
df.describe(percentiles=[.05, .25, .75, .95])#指定分位数
df.describe(include=[np.object, np.number]) # 指定类型
df.describe(exclude =[np.object])           # 排除类型

数学统计

df.mean()#生成series,每列平均数
df.mean(1)# 每行平均值
df.mean(axis=1)# 每行平均值
df.mean(axis='columns')# 每行平均值

df.Q1.mean()#指定列
df.set_index('name').mean(1).head()

 统计函数

df.mean() # 返回所有列的均值
df.mean(1) # 返回所有行的均值,下同
df.corr() # 返回列与列之间的相关系数
df.count() # 返回每一列中的非空值的个数
df.max() # 返回每一列的最大值
df.min() # 返回每一列的最小值
df.abs() # 绝对值
df.median() # 返回每一列的中位数
df.std() # 返回每一列的标准差, 贝塞尔校正的样本标准偏差
df.var() # 无偏方差
df.sem() # 平均值的标准误差
df.mode() # 众数
df.prod() # 连乘
df.mad() # 平均绝对偏差
df.cumprod() # 累积连乘,累乘
df.cumsum(axis=0) # 累积连加,累加
df.nunique() # 去重数量,不同值的量
df.idxmax() # 每列最大的值的索引名
df.idxmin() # 最小
df.cummax() # 累积最大值
df.cummin() # 累积最小值
df.skew() # 样本偏度 (第三阶)
df.kurt() # 样本峰度 (第四阶)
df.quantile() # 样本分位数 (不同 % 的值)
###其他
# 很多支持指定行列(默认是 axis=0 列)等参数
df.mean(1) # 按行计算
# 很多支持
df.sum(0, skipna=False) # 否要排除缺失数据
# 很多支持
df.sum(level='blooded') # 索引级别
df.sum(level=0)
df.sum(min_count=1)# 执行加法操作所需要的最小有效值
df.sum(1, numeric_only=True)# 按行计算,只计算数字类型

# 可自定义相关性函数
def histogram_intersection(a, b):
    v = np.minimum(a, b).sum().round(decimals=1)
    return v
df = pd.DataFrame([(.2, .3), (.0, .6), (.6, .0), (.2, .1)],columns=['dogs', 'cats'])
df.corr(method=histogram_intersection)

非统计计算

df.all() # 返回所有列all()值的Series
df.any()

# 用表达式计算生成列。仅支持列,不是太安全
biaodashi='总成绩='+'+'.join(df.columns[2:])
biaodashi2='平均成绩=('+'+'.join(df.columns[2:])+')/3'
df.eval(biaodashi) #inplace=True,表示在原数据集上修改,生成新列
df.eval(biaodashi2,inplace=True) #inplace=True,表示在原数据集上修改,生成新列
# 四舍五入
df.round(2) # 指定字段指定保留小数位,如有
df.round({'Q1': 2, 'Q2': 0})
df.round(-1) # 保留10位

# 每个列的去重值的数量
df.nunique()
s.nunique() # 本列的去重值

# 真假检测
df.isna() # 值的真假值替换
df.notna() # 与上相反

广播计算

df + 1 # 等运算
df.add() # 加
df.sub() # 减
df.mul() # 乘
df.div() # 除
df.divmod() # 返回 (a // b, a % b)
df.truediv() # Divide DataFrames (float division).
df.floordiv() # Divide DataFrames (integer division).
df.mod() # 模,除后的余数
df.pow() # 指数幂
df.dot(df2) # 矩阵运算

Series专用

# 不重复的值及数量
s.value_counts()
s.value_counts(normalize=True)     # 重复值的频率
s.value_counts(normalize=True)*100 # 当前值在序列中的百分比
s.value_counts(sort=False)         # 不按频率排序
s.unique()  # 去重的值 array
s.is_unique # 是否有重复

# 最大最小值
s.nlargest()    # 最大的前5个
s.nlargest(15)  # 最大的前15个
s.nsmallest()   # 最小的前5个
s.nsmallest(15) # 最小的前15个

s.pct_change()  # 计算与前一行的变化百分比
s.pct_change(periods=2) # 前两行

s1.cov(s2) # 两个序列的协方差

 数据降维

df['Q1'].squeeze()
# 单值 DataFrame 和 Series 转为标量
df.iloc[0, 2].squeeze() # 36
df.loc[df.index==5, ['name']].squeeze() # 'Harlie'

猜你喜欢

转载自blog.csdn.net/weixin_46277779/article/details/126058357