<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【Python】整理20個(gè)Pandas統(tǒng)計(jì)函數(shù)

          共 5782字,需瀏覽 12分鐘

           ·

          2022-04-18 07:34


          公眾號(hào):尤而小屋
          作者:Peter
          編輯:Peter

          最近整理了pandas中20個(gè)常用統(tǒng)計(jì)函數(shù)和用法,建議收藏學(xué)習(xí)~

          模擬數(shù)據(jù)

          為了解釋每個(gè)函數(shù)的使用,模擬了一份帶有空值的數(shù)據(jù):

          import?pandas?as?pd
          import?numpy?as?np

          import?matplotlib.pyplot?as?plt
          import?seaborn?as?sns

          df?=?pd.DataFrame({
          ????"sex":["male","male","female","female","male"],
          ????"age":[22,24,25,26,24],
          ????"chinese":[100,120,110,100,90],
          ????"math":[90,np.nan,100,80,120],??#?存在空值
          ????"english":[90,130,90,80,100]})

          df

          描述統(tǒng)計(jì)信息describe

          descirbe方法只能針對序列或數(shù)據(jù)框,一維數(shù)組是沒有這個(gè)方法的;同時(shí)默認(rèn)只能針對數(shù)值型的數(shù)據(jù)進(jìn)行統(tǒng)計(jì):

          DataFrame.describe(percentiles=None,include=None,exclude=None)
          • percentiles:可選折的百分?jǐn)?shù),列表形式;數(shù)值在0-1之間,默認(rèn)是[.25,.5,.75]
          • include/exclude:包含和排除的數(shù)據(jù)類型信息

          返回的信息包含:

          • 非空值的數(shù)量count;特例:math字段中有一個(gè)空值
          • 均值mean
          • 標(biāo)準(zhǔn)差std
          • 最小值min
          • 最大值max
          • 25%、50%、75%分位數(shù)
          df.describe()

          添加了參數(shù)后的情況,我們發(fā)現(xiàn):

          • sex字段的相關(guān)信息也被顯示出來
          • 顯示的信息更豐富,多了unique、top、freq等等

          非空值數(shù)量count

          返回的是每個(gè)字段中非空值的數(shù)量

          In [5]:

          df.count()

          Out[5]:

          sex????????5
          age????????5
          chinese????5
          math???????4??#?包含一個(gè)空值
          english????5
          dtype:?int64

          求和sum

          In [6]:

          df.sum()

          在這里我們發(fā)現(xiàn):如果字段是object類型的,sum函數(shù)的結(jié)果就是直接將全部取值拼接起來

          Out[6]:

          sex????????malemalefemalefemalemale?#?拼接
          age?????????????????????????????121??#?相加求和
          chinese?????????????????????????520
          math??????????????????????????390.0
          english?????????????????????????490
          dtype:?object

          最大值max

          In [7]:

          df.max()

          針對字符串的最值(最大值或者最小值),是根據(jù)字母的ASCII碼大小來進(jìn)行比較的:

          • 先比較首字母的大小
          • 首字母相同的話,再比較第二個(gè)字母

          Out[7]:

          sex?????????male??
          age???????????26
          chinese??????120
          math???????120.0
          english??????130
          dtype:?object

          最小值min

          和max函數(shù)的求解是類似的:

          In [8]:

          df.min()

          Out[8]:

          sex????????female
          age????????????22
          chinese????????90
          math?????????80.0
          english????????80
          dtype:?object

          分位數(shù)quantile

          返回指定位置的分位數(shù)

          In [9]:

          df.quantile(0.2)

          Out[9]:

          age????????23.6
          chinese????98.0
          math???????86.0
          english????88.0
          Name:?0.2,?dtype:?float64

          In [10]:

          df.quantile(0.25)

          Out[10]:

          age?????????24.0
          chinese????100.0
          math????????87.5
          english?????90.0
          Name:?0.25,?dtype:?float64

          In [11]:

          df.quantile(0.75)

          Out[11]:

          age?????????25.0
          chinese????110.0
          math???????105.0
          english????100.0
          Name:?0.75,?dtype:?float64

          通過箱型圖可以展示一組數(shù)據(jù)的25%、50%、75%的中位數(shù):

          In [12]:

          plt.figure(figsize=(12,6))#設(shè)置畫布的尺寸

          plt.boxplot([df["age"],df["chinese"],df["english"]],
          ???????????labels?=?["age","chinese","english"],
          #????????????vert=False,?
          ???????????showmeans=True,
          ???????????patch_artist?=?True,?
          ???????????boxprops?=?{'color':'orangered','facecolor':'pink'}
          #????????????showgrid=True
          ???????????)

          plt.show()

          箱型圖的具體展示信息:

          均值mean

          一組數(shù)據(jù)的平均值


          In [13]:

          df.mean()

          Out[13]:

          age?????????24.2
          chinese????104.0
          math????????97.5
          english?????98.0
          dtype:?float64

          通過下面的例子我們發(fā)現(xiàn):如果字段中存在缺失值(math存在缺失值),此時(shí)樣本的個(gè)數(shù)會(huì)自動(dòng)忽略缺失值的總數(shù)

          In [14]:

          390/4??#?個(gè)數(shù)不含空值

          Out[14]:

          97.5

          中值/中位數(shù)median

          比如:1,2,3,4,5 的中位數(shù)就是3

          再比如:1,2,3,4,5,6 的中位數(shù)就是 3+4 = 3.5

          In [15]:

          df.median()

          Out[15]:

          age?????????24.0
          chinese????100.0
          math????????95.0
          english?????90.0
          dtype:?float64

          眾數(shù)mode

          一組數(shù)據(jù)中出現(xiàn)次數(shù)最多的數(shù)

          In [16]:

          df.mode()

          Out[16]:

          最大值索引idmax

          idxmax() 返回的是最大值的索引

          In [17]:

          df["age"].idxmax()

          Out[17]:

          3

          In [18]:

          df["chinese"].idxmin()

          Out[18]:

          4

          不能字符類型的字段使用該函數(shù),Pandas不支持:

          In [19]:

          df["sex"].idxmax()

          最小值索引idxmin

          返回最小值所在的索引

          In [20]:

          df["age"].idxmin()

          Out[20]:

          0

          In [21]:

          df["math"].idxmin()

          Out[21]:

          3

          In [22]:

          df["sex"].idxmin()

          不能字符類型的字段使用該函數(shù),Pandas不支持:

          方差var

          計(jì)算一組數(shù)據(jù)的方差,需要注意的是:numpy中的方差叫總體方差,pandas中的方差叫樣本方差

          標(biāo)準(zhǔn)差(或方差)分為 總體標(biāo)準(zhǔn)差(方差)和 樣本標(biāo)準(zhǔn)差(方差)

          • 前者分母為n,右偏的;后者分母為n-1,是無偏的
          • pandas里是算無偏的;numpy里是有偏的

          In [23]:

          df.var()

          Out[23]:

          age??????????2.200000
          chinese????130.000000
          math???????291.666667??#?pandas計(jì)算結(jié)果
          english????370.000000
          dtype:?float64

          In [24]:

          df["math"].var()

          Out[24]:

          291.6666666666667

          In [25]:

          np.var(df["math"])??#?numpy計(jì)算結(jié)果

          Out[25]:

          218.75

          In [26]:

          np.var(df["age"])

          Out[26]:

          1.7600000000000002

          In [27]:

          np.var(df["english"])

          Out[27]:

          296.0

          標(biāo)準(zhǔn)差std

          返回的是一組數(shù)據(jù)的標(biāo)準(zhǔn)差

          In [28]:

          df.std()

          Out[28]:

          age?????????1.483240
          chinese????11.401754
          math???????17.078251
          english????19.235384
          dtype:?float64

          In [29]:

          np.std(df["math"])

          Out[29]:

          14.79019945774904

          In [30]:

          np.std(df["english"])

          Out[30]:

          17.204650534085253

          In [31]:

          np.std(df["age"])

          Out[31]:

          1.32664991614216

          如何理解pandas和numpy兩種方法對方差的求解不同:

          平均絕對偏差mad

          In [32]:

          df.mad()

          Out[32]:

          age?????????1.04
          chinese?????8.80
          math???????12.50
          english????13.60
          dtype:?float64

          以字段age為例:

          In [33]:

          df["age"].mad()

          Out[33]:

          1.0399999999999998

          In [34]:

          df["age"].tolist()

          Out[34]:

          [22,?24,?25,?26,?24]

          In [35]:

          age_mean?=?df["age"].mean()
          age_mean

          Out[35]:

          24.2

          In [36]:

          (abs(22-age_mean)?+?abs(24-age_mean)?+?abs(25-age_mean)?
          ?+?abs(26-age_mean)?+?abs(24-age_mean))?/?5

          Out[36]:

          1.0399999999999998

          偏度-skew

          介紹峰度和偏度的好文章:https://www.cnblogs.com/wyy1480/p/10474046.html

          偏度(skewness),是統(tǒng)計(jì)數(shù)據(jù)分布偏斜方向和程度的度量,是統(tǒng)計(jì)數(shù)據(jù)分布非對稱程度的數(shù)字特征。

          偏度(Skewness)亦稱偏態(tài)、偏態(tài)系數(shù),表征概率分布密度曲線相對于平均值不對稱程度的特征數(shù)。

          直觀看來就是密度函數(shù)曲線尾部的相對長度。定義上偏度是樣本的三階標(biāo)準(zhǔn)化矩:

          In [37]:

          df.skew()

          Out[37]:

          age???????-0.551618
          chinese????0.404796
          math???????0.752837
          english????1.517474
          dtype:?float64

          In [38]:

          df["age"].skew()

          Out[38]:

          -0.5516180692881046

          峰度-kurt

          返回的是峰度值

          In [39]:

          df.kurt()

          Out[39]:

          age????????0.867769
          chinese???-0.177515
          math???????0.342857
          english????2.607743
          dtype:?float64

          In [40]:

          df["age"].kurt()

          Out[40]:

          0.8677685950413174

          In [41]:

          df["math"].kurt()

          Out[41]:

          0.3428571428571434??????

          絕對值abs

          返回?cái)?shù)據(jù)的絕對值:

          In [45]:

          df["age"].abs()

          Out[45]:

          0????22
          1????24
          2????25
          3????26
          4????24
          Name:?age,?dtype:?int64

          如果存在缺失值,絕對值函數(shù)求解后仍是NaN:

          In [46]:

          df["math"].abs()

          Out[46]:

          0?????90.0
          1??????NaN
          2????100.0
          3?????80.0
          4????120.0
          Name:?math,?dtype:?float64

          絕對值函數(shù)是針對數(shù)值型的字段,不能對字符類型的字段求絕對值:

          In [47]:

          #?字符類型的數(shù)據(jù)報(bào)錯(cuò)
          df["sex"].abs()

          元素乘積prod

          In [48]:

          df.prod()

          Out[48]:

          age????????8.236800e+06
          chinese????1.188000e+10
          math???????8.640000e+07
          english????8.424000e+09
          dtype:?float64

          In [49]:

          df["age"].tolist()

          Out[49]:

          [22,?24,?25,?26,?24]

          In [50]:

          22?*?24?*?25?*?26?*?24

          Out[50]:

          8236800

          累計(jì)求和cumsum

          In [51]:

          df.cumsum()

          累計(jì)乘積cumprod

          In [52]:

          df["age"].cumprod()

          Out[52]:

          0?????????22
          1????????528
          2??????13200
          3?????343200
          4????8236800
          Name:?age,?dtype:?int64

          In [53]:

          df["math"].cumprod()

          Out[53]:

          0??????????90.0
          1???????????NaN
          2????????9000.0
          3??????720000.0
          4????86400000.0
          Name:?math,?dtype:?float64

          In [54]:

          #?字符類型字段報(bào)錯(cuò)
          df["sex"].cumprod()

          20個(gè)統(tǒng)計(jì)函數(shù)

          最后再總結(jié)下Pandas中常用來描述統(tǒng)計(jì)信息的函數(shù):

          往期精彩回顧





          瀏覽 74
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  苍井空二区| av噜噜国产在线观看 | 大鸡巴插入 | 成人免费黄色 | 无码破解日韩AV无码 |