Pandas的函數(shù)應用、層級索引篇梭、統(tǒng)計計算

文章來源:Python數(shù)據(jù)分析

目錄:

1.Pandas的函數(shù)應用

apply 和 applymap

1. 可直接使用NumPy的函數(shù)

示例代碼:

# Numpy ufunc 函數(shù)
df = pd.DataFrame(np.random.randn(5,4) - 1)
print(df)

print(np.abs(df))

運行結(jié)果:

          0         1         2         3
0 -0.062413  0.844813 -1.853721 -1.980717
1 -0.539628 -1.975173 -0.856597 -2.612406
2 -1.277081 -1.088457 -0.152189  0.530325
3 -1.356578 -1.996441  0.368822 -2.211478
4 -0.562777  0.518648 -2.007223  0.059411

          0         1         2         3
0  0.062413  0.844813  1.853721  1.980717
1  0.539628  1.975173  0.856597  2.612406
2  1.277081  1.088457  0.152189  0.530325
3  1.356578  1.996441  0.368822  2.211478
4  0.562777  0.518648  2.007223  0.059411

2. 通過apply將函數(shù)應用到列或行上

示例代碼:

# 使用apply應用行或列數(shù)據(jù)
#f = lambda x : x.max()
print(df.apply(lambda x : x.max()))

運行結(jié)果:

0   -0.062413
1    0.844813
2    0.368822
3    0.530325
dtype: float64

注意指定軸的方向,默認axis=0袍患,方向是列

示例代碼:

# 指定軸方向坦康,axis=1,方向是行
print(df.apply(lambda x : x.max(), axis=1))

運行結(jié)果:

0    0.844813
1   -0.539628
2    0.530325
3    0.368822
4    0.518648
dtype: float64

3. 通過applymap將函數(shù)應用到每個數(shù)據(jù)上

示例代碼:

# 使用applymap應用到每個數(shù)據(jù)
f2 = lambda x : '%.2f' % x
print(df.applymap(f2))

運行結(jié)果:

       0      1      2      3
0  -0.06   0.84  -1.85  -1.98
1  -0.54  -1.98  -0.86  -2.61
2  -1.28  -1.09  -0.15   0.53
3  -1.36  -2.00   0.37  -2.21
4  -0.56   0.52  -2.01   0.06

排序

1. 索引排序

sort_index()

排序默認使用升序排序诡延,ascending=False 為降序排序

示例代碼:

# Series
s4 = pd.Series(range(10, 15), index = np.random.randint(5, size=5))
print(s4)

# 索引排序
s4.sort_index() # 0 0 1 3 3

運行結(jié)果:

0    10
3    11
1    12
3    13
0    14
dtype: int64

0    10
0    14
1    12
3    11
3    13
dtype: int64

對DataFrame操作時注意軸方向

示例代碼:

# DataFrame
df4 = pd.DataFrame(np.random.randn(3, 5), 
                   index=np.random.randint(3, size=3),
                   columns=np.random.randint(5, size=5))
print(df4)

df4_isort = df4.sort_index(axis=1, ascending=False)
print(df4_isort) # 4 2 1 1 0

運行結(jié)果:

          1         4         0         1         2
2 -0.416686 -0.161256  0.088802 -0.004294  1.164138
1 -0.671914  0.531256  0.303222 -0.509493 -0.342573
1  1.988321 -0.466987  2.787891 -1.105912  0.889082

          4         2         1         1         0
2 -0.161256  1.164138 -0.416686 -0.004294  0.088802
1  0.531256 -0.342573 -0.671914 -0.509493  0.303222
1 -0.466987  0.889082  1.988321 -1.105912  2.787891

2. 按值排序

sort_values(by='column name')

根據(jù)某個唯一的列名進行排序檐迟,如果有其他相同列名則報錯叠殷。

示例代碼:

# 按值排序
df4_vsort = df4.sort_values(by=0, ascending=False)
print(df4_vsort)

運行結(jié)果:

          1         4         0         1         2
1  1.988321 -0.466987  2.787891 -1.105912  0.889082
1 -0.671914  0.531256  0.303222 -0.509493 -0.342573
2 -0.416686 -0.161256  0.088802 -0.004294  1.164138

處理缺失數(shù)據(jù)

示例代碼:

df_data = pd.DataFrame([np.random.randn(3), [1., 2., np.nan],
                       [np.nan, 4., np.nan], [1., 2., 3.]])
print(df_data.head())

運行結(jié)果:

          0         1         2
0 -0.281885 -0.786572  0.487126
1  1.000000  2.000000       NaN
2       NaN  4.000000       NaN
3  1.000000  2.000000  3.000000

1. 判斷是否存在缺失值:isnull()

示例代碼:

# isnull
print(df_data.isnull())

運行結(jié)果:

       0      1      2
0  False  False  False
1  False  False   True
2   True  False   True
3  False  False  False

2. 丟棄缺失數(shù)據(jù):dropna()

根據(jù)axis軸方向渐北,丟棄包含NaN的行或列。 示例代碼:

# dropna
print(df_data.dropna())

print(df_data.dropna(axis=1))

運行結(jié)果:

          0         1         2
0 -0.281885 -0.786572  0.487126
3  1.000000  2.000000  3.000000

          1
0 -0.786572
1  2.000000
2  4.000000
3  2.000000

3. 填充缺失數(shù)據(jù):fillna()

示例代碼:

# fillna
print(df_data.fillna(-100.))

運行結(jié)果:

            0         1           2
0   -0.281885 -0.786572    0.487126
1    1.000000  2.000000 -100.000000
2 -100.000000  4.000000 -100.000000
3    1.000000  2.000000    3.000000

2.層級索引(hierarchical indexing)

下面創(chuàng)建一個Series逸绎, 在輸入索引Index時,輸入了由兩個子list組成的list夭谤,第一個子list是外層索引棺牧,第二個list是內(nèi)層索引。

示例代碼:

import pandas as pd
import numpy as np

ser_obj = pd.Series(np.random.randn(12),index=[
                ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
                [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
            ])
print(ser_obj)

運行結(jié)果:

a  0    0.099174
   1   -0.310414
   2   -0.558047
b  0    1.742445
   1    1.152924
   2   -0.725332
c  0   -0.150638
   1    0.251660
   2    0.063387
d  0    1.080605
   1    0.567547
   2   -0.154148
dtype: float64

MultiIndex索引對象

  • 打印這個Series的索引類型朗儒,顯示是MultiIndex

  • 直接將索引打印出來颊乘,可以看到有l(wèi)avels,和labels兩個信息。lavels表示兩個層級中分別有那些標簽醉锄,labels是每個位置分別是什么標簽疲牵。

示例代碼:

print(type(ser_obj.index))
print(ser_obj.index)

運行結(jié)果:

<class 'pandas.indexes.multi.MultiIndex'>
MultiIndex(levels=[['a', 'b', 'c', 'd'], [0, 1, 2]],
           labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]])

選取子集

  • 根據(jù)索引獲取數(shù)據(jù)。因為現(xiàn)在有兩層索引榆鼠,當通過外層索引獲取數(shù)據(jù)的時候,可以直接利用外層索引的標簽來獲取亥鸠。

  • 當要通過內(nèi)層索引獲取數(shù)據(jù)的時候妆够,在list中傳入兩個元素,前者是表示要選取的外層索引负蚊,后者表示要選取的內(nèi)層索引神妹。

1. 外層選取:

ser_obj['outer_label']

示例代碼:

# 外層選取
print(ser_obj['c'])

運行結(jié)果:

0   -1.362096
1    1.558091
2   -0.452313
dtype: float64
  1. 內(nèi)層選燃易薄:

ser_obj[:, 'inner_label']

示例代碼:

# 內(nèi)層選取
print(ser_obj[:, 2])

運行結(jié)果:

a    0.826662
b    0.015426
c   -0.452313
d   -0.051063
dtype: float64

常用于分組操作鸵荠、透視表的生成等

交換分層順序

1. swaplevel()

.swaplevel( )交換內(nèi)層與外層索引。

示例代碼:

print(ser_obj.swaplevel())

運行結(jié)果:

0  a    0.099174
1  a   -0.310414
2  a   -0.558047
0  b    1.742445
1  b    1.152924
2  b   -0.725332
0  c   -0.150638
1  c    0.251660
2  c    0.063387
0  d    1.080605
1  d    0.567547
2  d   -0.154148
dtype: float64

交換并排序分層 sortlevel()

  • .sortlevel( )先對外層索引進行排序伤极,再對內(nèi)層索引進行排序蛹找,默認是升序。

示例代碼:

# 交換并排序分層
print(ser_obj.swaplevel().sortlevel())

運行結(jié)果:

0  a    0.099174
   b    1.742445
   c   -0.150638
   d    1.080605
1  a   -0.310414
   b    1.152924
   c    0.251660
   d    0.567547
2  a   -0.558047
   b   -0.725332
   c    0.063387
   d   -0.154148
dtype: float64

3.Pandas統(tǒng)計計算和描述

示例代碼:

import numpy as np
import pandas as pd

df_obj = pd.DataFrame(np.random.randn(5,4), columns = ['a', 'b', 'c', 'd'])
print(df_obj)

運行結(jié)果:

          a         b         c         d
0  1.469682  1.948965  1.373124 -0.564129
1 -1.466670 -0.494591  0.467787 -2.007771
2  1.368750  0.532142  0.487862 -1.130825
3 -0.758540 -0.479684  1.239135  1.073077
4 -0.007470  0.997034  2.669219  0.742070

常用的統(tǒng)計計算

sum, mean, max, min

axis=0 按列統(tǒng)計哨坪,axis=1按行統(tǒng)計

skipna 排除缺失值庸疾, 默認為True

示例代碼:

df_obj.sum()

df_obj.max()

df_obj.min(axis=1, skipna=False)

運行結(jié)果:

a    0.605751
b    2.503866
c    6.237127
d   -1.887578
dtype: float64

a    1.469682
b    1.948965
c    2.669219
d    1.073077
dtype: float64

0   -0.564129
1   -2.007771
2   -1.130825
3   -0.758540
4   -0.007470
dtype: float64

常用的統(tǒng)計描述

describe 產(chǎn)生多個統(tǒng)計數(shù)據(jù)

示例代碼:

print(df_obj.describe())

運行結(jié)果:

              a         b         c         d
count  5.000000  5.000000  5.000000  5.000000
mean   0.180305  0.106488  0.244978  0.178046
std    0.641945  0.454340  1.064356  1.144416
min   -0.677175 -0.490278 -1.164928 -1.574556
25%   -0.064069 -0.182920 -0.464013 -0.089962
50%    0.231722  0.127846  0.355859  0.190482
75%    0.318854  0.463377  1.169750  0.983663
max    1.092195  0.614413  1.328220  1.380601

常用的統(tǒng)計描述方法:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市当编,隨后出現(xiàn)的幾起案子届慈,更是在濱河造成了極大的恐慌,老刑警劉巖忿偷,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件金顿,死亡現(xiàn)場離奇詭異,居然都是意外死亡鲤桥,警方通過查閱死者的電腦和手機揍拆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茶凳,“玉大人礁凡,你說我怎么就攤上這事高氮。” “怎么了顷牌?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵剪芍,是天一觀的道長。 經(jīng)常有香客問我窟蓝,道長罪裹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任运挫,我火速辦了婚禮状共,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谁帕。我一直安慰自己峡继,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布匈挖。 她就那樣靜靜地躺著碾牌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪儡循。 梳的紋絲不亂的頭發(fā)上舶吗,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音择膝,去河邊找鬼誓琼。 笑死,一個胖子當著我的面吹牛肴捉,可吹牛的內(nèi)容都是我干的腹侣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼齿穗,長吁一口氣:“原來是場噩夢啊……” “哼筐带!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缤灵,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤伦籍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后腮出,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帖鸦,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年胚嘲,在試婚紗的時候發(fā)現(xiàn)自己被綠了作儿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡馋劈,死狀恐怖攻锰,靈堂內(nèi)的尸體忽然破棺而出晾嘶,到底是詐尸還是另有隱情,我是刑警寧澤娶吞,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布垒迂,位于F島的核電站,受9級特大地震影響妒蛇,放射性物質(zhì)發(fā)生泄漏机断。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一绣夺、第九天 我趴在偏房一處隱蔽的房頂上張望吏奸。 院中可真熱鬧,春花似錦陶耍、人聲如沸奋蔚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泊碑。三九已至,卻和暖如春棵磷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晋涣。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工仪媒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谢鹊。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓算吩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親佃扼。 傳聞我的和親對象是個殘疾皇子偎巢,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容