Python基礎 | pandas基礎統計

本文示例數據下載,密碼:vwy3html

import pandas as pd
import numpy as np

# 數據是以前在cnblog上抓取的部分文章信息
df = pd.read_csv('./data/SQL測試用數據_20200325.csv',encoding='utf-8')

df.head(3)

單列統計

單列單統計指標

# 計數(不去重),不會將NaN值計算在內
df['read_cnt'].count()
# 好比咱們來作個試驗

# 選擇幾個單元格,以前都是有數值的
print(df.loc[2:4,'read_cnt'])

# 而後將值設定爲NaN
df.loc[2:4,'read_cnt'] = None

print(df.loc[2:4,'read_cnt'])

# 看看count()結果
print(df['read_cnt'].count())


# 數據恢復原樣
df.loc[2:4,'read_cnt'] = [142,158,132]
# 計數(去重),不會將NaN值計算在內
# 使用nunique()方法
df['blog_name'].nunique()

常見統計指標python

  • 求和 .sum()
  • 最大值 .min()
  • 最小值 .min()
  • 均值 .mean()
  • 中位數 .median()
  • 方差 .var()
  • 標準差.std()
  • 偏度 .skew()
  • 峯度 .kurtosis()
  • 百分位數 .quantile(), df.quantile(0.5)至關於中位數

單列多統計指標

# 求和,計數,均值
df['read_cnt'].aggregate(func=['sum','count','mean'])

多列統計

多列相同統計指標

# 去重計數,至關於sql中的count(distinct)
df.nunique()
df.describe() # 只對數值列有效
# 選定多列同時計算多個相同的指標
df[['href','blog_name']].aggregate(func=['nunique','count'])

多列不一樣統計指標

# 對blog_name字段去重計數
# 對read_cnt計算求和、均值
df[['blog_name','read_cnt']].aggregate(func={'blog_name':'nunique','read_cnt':['sum','mean']})

分組統計

df.groupby

pandas groupby官方介紹sql

單字段單指標

這裏的單字段是指統計用的value列ide

df.groupby('weekday')['read_cnt'].nunique()

單字段多指標

df.groupby('weekday')['read_cnt'].aggregate(func=['sum','mean']).reset_index()
# 多個分組字段
df.groupby(['weekday','hour'])['read_cnt'].aggregate(func=['sum','mean']).reset_index()

多字段相同指標

# 除了分組字段外,其餘字段都參與計算
df.groupby('weekday').count().reset_index()
# 指定多個字段
# 注意多個字段要以list的格式包裹
df.groupby('weekday')[['blog_name','date']].nunique().reset_index()
# 多字段統一計算相同指標
df.groupby('weekday').aggregate(func=['nunique','count']).reset_index()

多字段不一樣指標

df.groupby('weekday')[['blog_name','read_cnt']]\
.aggregate(func={'blog_name':'nunique','read_cnt':['median','mean']})\
.reset_index()

df.pivot_table

pd.pivot_table主要參數說明:函數

  • data 參與計算的dataframe
  • values 須要進行統計計算的列,能夠是單列或多列(e.g.['col_1','col_2'])
  • index 位於左側的維度
  • columns 位於上方的維度
  • aggfunc 統計要用的函數,能夠同時對多個字段計算多個統計值,也能夠對每一個字段設置不一樣的統計指標
    • aggfunc = ['sum','np.sum','mean','count']
    • aggfunc = {'col_1':'sum','col_2':['sum','mean']}
  • fill_value缺失值設定填充值
  • margins 默認False,是否要對行和列彙總,只有設定了index參數纔有效
  • dropna=True,是否刪除NaN
  • margins_name='All', 彙總的行或列的名稱

df.pivot_table中的參數和pd.pivot_table保持一致測試

單字段單指標

# index和columns能夠不用同時設置值
# 對比一下二者的差別

# index是將分組的字段放到統計表格的左側
pd.pivot_table(df, values='read_cnt'\
              ,index='weekday'\
              ,aggfunc='sum').reset_index()
# columns是將制定的分組字段放到統計table的正上方
pd.pivot_table(df, values='read_cnt'\
              ,columns='weekday'\
              ,aggfunc='sum').reset_index()
# index和columns同時設定的效果
pd.pivot_table(df, values='read_cnt'\
              ,index='hour'\
              ,columns='weekday'\
              ,aggfunc='sum').reset_index()

爲了便於演示計算字段(values)和統計指標(aggfunc)的操做,後續只使用index字段分組ui

單字段多指標

pd.pivot_table(df, values='read_cnt'\
              ,index='weekday'\
              ,aggfunc=['sum','mean']).reset_index()

多字段相同指標

# 對blog_name,date兩個字段去重計數
pd.pivot_table(df, values=['blog_name','date']\
              ,index='weekday'\
              ,aggfunc= lambda x :x.nunique()).reset_index()

# 這裏的lambda函數也能夠定義爲 lambda x:len(x.unique())

多字段不一樣指標

pd.pivot_table(df, values=['blog_name','read_cnt']\
              ,index='weekday'\
              ,aggfunc={'blog_name':lambda x: x.nunique(),'read_cnt':['sum','mean']}).reset_index()

其餘補充code

# 實現rollup的操做

df_stat = pd.pivot_table(df, values='read_cnt'\
              ,index=['weekday']
              ,columns='hour'\
              ,aggfunc='sum',margins=True).unstack()

pd.DataFrame(df_stat).head(30)
相關文章
相關標籤/搜索