主頁 > 後端開發 > 學習pandas全套代碼【超詳細】資料查看、輸入輸出、選取、集成、清洗、轉換、重塑、數學和統計方法、排序

學習pandas全套代碼【超詳細】資料查看、輸入輸出、選取、集成、清洗、轉換、重塑、數學和統計方法、排序

2021-10-30 09:38:53 後端開發

本篇博客將會給出大家平時使用pandas的時候經常需要用到的功能代碼,同時也會給出運行結果,以幫助大家更進一步的理解,

另外,我也以注釋的形式更進一步的補充說明代碼的功能及其作用,需要本篇博文中用到的檔案檔案以及代碼的朋友,也可以三連支持一下,并評論留下你的郵箱,我會在看到后的第一時間發送給你,

當然啦,你也可以把本篇博文當作一本小小的pandas書籍,當需要用到pandas哪些知識的時候,Ctrl+F就可以搜索到啦,現在不看的話就先收藏著,

目錄

  • 第一部分:pandas資料結構
    • 1.1 Series
    • 1.2 DataFrame
  • 第二部分:資料查看
  • 第三部分:資料輸入與輸出
    • 3.1 csv
    • 3.2 Excel
    • 3.3 HDF5
    • 3.4 SQL
  • 第四部分:資料選取
    • 4.1 獲取資料
    • 4.2 標簽選擇
    • 4.3 位置選擇
    • 4.4 boolean索引
    • 4.5 賦值操作
  • 第五部分:資料集成
    • 5.1 concat資料串聯
    • 5.2 資料插入
    • 5.3 Join SQL風格合并
  • 第六部分:資料清洗
  • 第七部分:資料轉換
    • 7.1 軸和元素轉換
    • 7.2 map映射元素轉變
    • 7.3 apply映射元素轉變
    • 7.4 transform元素轉變
    • 7.5 重排隨機抽樣啞變數
  • 第八部分:資料重塑
  • 第九部分:數學和統計方法
    • 9.1 簡單統計指標
    • 9.2 索引標簽、位置獲取
    • 9.3 更多統計指標
    • 9.4 高級統計指標
  • 第十部分:排序
  • 結束語

第一部分:pandas資料結構

import numpy as np
import pandas as pd # pandas基于NumPy,升級

pandas的主要資料結構是 Series(?維資料)與 DataFrame(二維資料),

1.1 Series

# Series
l = np.array([1,2,3,6,9]) # NumPy陣列

s1 = pd.Series(data = l)
display(l,s1) # Series是一維的陣列,和NumPy陣列不一樣:Series多了索引
array([1, 2, 3, 6, 9])



0    1
1    2
2    3
3    6
4    9
dtype: int64
s2 = pd.Series(data = l,index = list('ABCDE'))
s2
A    1
B    2
C    3
D    6
E    9
dtype: int64
s3 = pd.Series(data = {'A':149,'B':130,'C':118,'D':99,'E':66})
s3
A    149
B    130
C    118
D     99
E     66
dtype: int64

1.2 DataFrame

# Series是一維的,功能比較少
# DataFrame是二維的,多個Series公用索引,組成了DataFrame
# 像不像 Excel,所有資料,結構化
df1 = pd.DataFrame(data = np.random.randint(0,151,size = (10,3)),
                   index = list('ABCDEFHIJK'), # 行索引
                   columns=['Python','Math','En'],dtype=np.float16) # 列索引
df1
PythonMathEn
A113.037.070.0
B92.022.011.0
C0.09.066.0
D40.0145.023.0
E25.0133.0108.0
F124.016.0130.0
H121.085.0133.0
I84.0125.039.0
J111.036.0137.0
K55.026.085.0
df2 = pd.DataFrame(data = {'Python':[66,99,128],'Math':[88,65,137],'En':[100,121,45]})
df2 # 字典,key作為列索引,不指定index默認從0開始索引,自動索引一樣
PythonMathEn
06688100
19965121
212813745

第二部分:資料查看

df = pd.DataFrame(data = np.random.randint(0,151,size = (100,3)),
                  columns=['Python','Math','En'])
df
PythonMathEn
0133139141
18217130
25151145
31277011
4936091
............
955713396
969121134
9776109113
98998229
99285488

100 rows × 3 columns

df.shape # 查看DataFrame形狀
(100, 3)
df.head(n = 3) # 顯示前N個,默認N = 5
PythonMathEn
0133139141
18217130
25151145
df.tail() # 顯示后n個
PythonMathEn
955713396
969121134
9776109113
98998229
99285488
df.dtypes # 資料型別
Python    int64
Math      int64
En        int64
dtype: object
df.info() # 比較詳細資訊
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100 entries, 0 to 99
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   Python  100 non-null    int64
 1   Math    100 non-null    int64
 2   En      100 non-null    int64
dtypes: int64(3)
memory usage: 2.5 KB
df.describe() # 描述:平均值、標準差、中位數、四等分、最大值,最小值
PythonMathEn
count100.000000100.000000100.000000
mean85.79000077.41000067.630000
std41.37517344.90530943.883835
min3.0000000.0000003.000000
25%54.50000040.25000031.250000
50%84.50000081.00000058.500000
75%123.000000113.250000103.000000
max149.000000149.000000147.000000
df.values # 值,回傳的是NumPy陣列
array([[133, 139, 141],
       [ 82,  17, 130],
       [ 51,  51, 145],
       [127,  70,  11],
       [ 93,  60,  91],
       [103, 110, 103],
       [ 27, 133,  32],
       [148,  99, 128],
       [139,  97,  44],
       [ 64,  85,  71],
       [147,  94,  37],
       [114,  12,  16],
       [ 16,  54,  44],
       [123,   3,  76],
       [137,  97, 123],
       [149, 113,  74],
       [ 69,  38,   7],
       [ 68, 122,   4],
       [ 53,  13,  47],
       [113, 127, 124],
       [ 55, 139,  47],
       [140, 114,  14],
       [ 84, 111, 115],
       [ 65,   5, 136],
       [ 96,  50,  89],
       [145, 130,  15],
       [111,  30,  66],
       [132, 122, 144],
       [ 79,   5,  45],
       [115,  29,  49],
       [ 27,  55,  83],
       [ 29,  74,  38],
       [ 87, 100,  45],
       [132, 147, 119],
       [ 66,  90,  40],
       [ 67, 108,  48],
       [ 78,  28,  46],
       [105, 137, 110],
       [132, 119,  55],
       [117,  23,  79],
       [ 12,  29,  12],
       [114,  58, 119],
       [139,   0,  42],
       [ 61,  69, 142],
       [141,  73, 107],
       [ 49,  12,  19],
       [  8,   1,  75],
       [134,  60,  25],
       [138,  80,  79],
       [112, 115,  26],
       [ 77,   4, 120],
       [140, 100,  35],
       [ 82, 129,   4],
       [100,   8,  25],
       [ 77,  97,  78],
       [ 55, 113,  53],
       [ 45,  73,  37],
       [ 44,   0,  80],
       [ 26,  74,  52],
       [ 99,  75, 147],
       [111,   8, 144],
       [ 55, 146,  15],
       [140, 106,  74],
       [ 91,  78,  92],
       [130, 108,  41],
       [ 34,  41, 136],
       [  3, 139,   4],
       [123,  93,   4],
       [ 24, 103,   3],
       [ 44, 122,  92],
       [ 83,  45,  50],
       [ 46, 149, 103],
       [ 48, 127,  92],
       [  3,  51,  57],
       [136, 136,  82],
       [ 65, 102,  16],
       [ 23,  61, 118],
       [138,  15,   6],
       [ 83,  91,   4],
       [109,  24,  54],
       [ 40,  43, 125],
       [103, 123, 141],
       [116, 113,  38],
       [137,  71, 126],
       [ 69, 143,  83],
       [  8,  60,  60],
       [ 40,  22,  95],
       [ 73,  19,  17],
       [137, 129, 103],
       [109, 142,  94],
       [ 85, 105,  10],
       [ 97, 107,  19],
       [ 79,  12,  27],
       [143,  74,  18],
       [ 32, 114,  52],
       [ 57, 133,  96],
       [ 91,  21, 134],
       [ 76, 109, 113],
       [ 99,  82,  29],
       [ 28,  54,  88]])
df.columns # 列索引
Index(['Python', 'Math', 'En'], dtype='object')
df.index # 行索引 0 ~ 99
RangeIndex(start=0, stop=100, step=1)

第三部分:資料輸入與輸出

3.1 csv

df = pd.DataFrame(data = np.random.randint(0,151,size = (100,3)),
                  columns=['Python','Math','En'])
df # 行索引,列索引
PythonMathEn
01012854
1454774
210333133
3702481
490143121
............
9514525139
965351109
97357130
98865120
991496675

100 rows × 3 columns

df.to_csv('./data.csv',sep = ',',
          index = True, # 保存行索引
          header=True) # 保存列索引
df.to_csv('./data2.csv',sep = ',',
          index = False, # 不保存行索引
          header=False) # 不保存列索引
pd.read_csv('./data.csv',
            index_col=0) # 第一列作為行索引
PythonMathEn
01012854
1454774
210333133
3702481
490143121
............
9514525139
965351109
97357130
98865120
991496675

100 rows × 3 columns

pd.read_csv('./data2.csv',header =None)
012
01012854
1454774
210333133
3702481
490143121
............
9514525139
965351109
97357130
98865120
991496675

100 rows × 3 columns

3.2 Excel

df
PythonMathEn
01012854
1454774
210333133
3702481
490143121
............
9514525139
965351109
97357130
98865120
991496675

100 rows × 3 columns

df.to_excel('./data.xls')
pd.read_excel('./data.xls',
              index_col=0) # 第一列作為行索引
PythonMathEn
01012854
1454774
210333133
3702481
490143121
............
9514525139
965351109
97357130
98865120
991496675

100 rows × 3 columns

3.3 HDF5

df.to_hdf('./data.h5',key = 'score')
df2 = pd.DataFrame(data = np.random.randint(6,100,size = (1000,5)),
                   columns=['計算機','化工','生物','工程','教師'])
df2
計算機化工生物工程教師
06422166860
19547727637
28848925037
3753886383
46214202145
..................
9958994889727
996526821850
9977699109256
9986631556594
999821388914

1000 rows × 5 columns

df2.to_hdf('./data.h5',key = 'salary')
pd.read_hdf('./data.h5',key = 'salary')
計算機化工生物工程教師
06422166860
19547727637
28848925037
3753886383
46214202145
..................
9958994889727
996526821850
9977699109256
9986631556594
999821388914

1000 rows × 5 columns

3.4 SQL

from sqlalchemy import create_engine # 資料庫引擎,構建和資料庫的連接
# PyMySQL
# 類似網頁地址
engine = create_engine('mysql+pymysql://root:12345678@localhost/pandas?charset=utf8')
df2.to_sql('salary',engine,index=False) # 將Python中資料DataFrame保存到Mysql
df3 = pd.read_sql('select * from salary limit 50',con = engine)
df3
計算機化工生物工程教師
06422166860
19547727637
28848925037
3753886383
46214202145
59541843716
63445119394
79910573063
85960123793
94158156770
10198639664
117561784989
128684316827
134298242085
149515978087
155222443574
166720652410
17946416266
188676807219
19618164266
20779284187
218716751434
222382924232
236189282140
242212388914
257712468912
266045527167
272976942691
281460828860
295636446037
306377434282
312571365121
32768687838
339359862578
347340128666
351030541371
36948587585
378141611255
388068669284
395336842666
401962634745
418939913186
425743534819
436616231910
444628788121
45385376498
46559470644
475633921784
486968238790
491247328015

第四部分:資料選取

4.1 獲取資料

df = pd.DataFrame(np.random.randint(0,151,size = (10,3)),
                  index=list('ABCDEFHIJK'),columns=['Python','Math','En'])
df
PythonMathEn
A885248
B786294
C91471
D861521
E17171
F12313855
H5917140
I68858
J1007063
K793772
df['Python'] # 獲取資料Series
A     88
B     78
C      9
D     86
E      1
F    123
H     59
I     68
J    100
K     79
Name: Python, dtype: int64
df.Python # 屬性,DataFrame中列索引,表示屬性
A     88
B     78
C      9
D     86
E      1
F    123
H     59
I     68
J    100
K     79
Name: Python, dtype: int64
df[['Python','En']] # 獲取多列資料
PythonEn
A8848
B7894
C971
D8621
E171
F12355
H59140
I6858
J10063
K7972

4.2 標簽選擇

# 標簽,就是行索引 location = loc 位置
df.loc['A']
Python    88
Math      52
En        48
Name: A, dtype: int64
df.loc[['A','F','K']]
PythonMathEn
A885248
F12313855
K793772
df.loc['A','Python']
88
df.loc[['A','C','F'],'Python']
A     88
C      9
F    123
Name: Python, dtype: int64
df.loc['A'::2,['Math','En']]
MathEn
A5248
C1471
E7171
H17140
J7063
df.loc['A':'D',:]
PythonMathEn
A885248
B786294
C91471
D861521

4.3 位置選擇

df.iloc[0]
Python    88
Math      52
En        48
Name: A, dtype: int64
df.iloc[[0,2,4]]
PythonMathEn
A885248
C91471
E17171
df.iloc[0:4,[0,2]]
PythonEn
A8848
B7894
C971
D8621
df.iloc[3:8:2]
PythonMathEn
D861521
F12313855
I68858

4.4 boolean索引

cond = df.Python > 80 # 將Python大于80分的成績獲取
df[cond]
PythonMathEn
A885248
D861521
F12313855
J1007063
cond = df.mean(axis = 1) > 75 # 平均分大于75,優秀,篩選出來
df[cond]
PythonMathEn
B786294
F12313855
J1007063
cond = (df.Python > 70) & (df.Math > 70)
df[cond]
PythonMathEn
F12313855
cond = df.index.isin(['C','E','H','K']) # 判斷資料是否在陣列中
df[cond] # 刪選出來了符合條件的資料
PythonMathEn
C91471
E17171
H5917140
K793772

4.5 賦值操作

df['Python']['A'] = 150 # 修改某個位置的值
df
PythonMathEn
A1505248
B786294
C91471
D861521
E17171
F12313855
H5917140
I68858
J1007063
K793772
df['Java'] = np.random.randint(0,151,size = 10) # 新增加一列
df
PythonMathEnJava
A150524865
B78629425
C9147182
D861521139
E1717167
F12313855145
H591714053
I68858141
J100706311
K793772127
df.loc[['C','D','E'],'Math'] = 147 # 修改多個人的成績
df
PythonMathEnJava
A150524865
B78629425
C91477182
D8614721139
E11477167
F12313855145
H591714053
I68858141
J100706311
K793772127
cond = df < 60
df[cond] = 60 # where 條件操作,符合這條件值,修改,不符合,不改變
df
PythonMathEnJava
A150606065
B78629460
C601477182
D8614760139
E601477167
F12313860145
H606014060
I686060141
J100706360
K796072127
df.iloc[3::3,[0,2]] += 100
df
PythonMathEnJava
A150606065
B78629460
C601477182
D186147160139
E601477167
F12313860145
H1606024060
I686060141
J100706360
K17960172127

第五部分:資料集成

5.1 concat資料串聯

# np.concatenate NumPy資料集成
df1 = pd.DataFrame(np.random.randint(0,151,size = (10,3)),
                   columns=['Python','Math','En'],
                   index = list('ABCDEFHIJK'))
df2 = pd.DataFrame(np.random.randint(0,151,size = (10,3)),
                   columns = ['Python','Math','En'],
                   index = list('QWRTUYOPLM'))
df3 = pd.DataFrame(np.random.randint(0,151,size = (10,2)),
                  columns=['Java','Chinese'],index = list('ABCDEFHIJK'))
pd.concat([df1,df2],axis = 0) # axis = 0變是行合并,行增加
PythonMathEn
A1087453
B981647
C7177128
D9123131
E2590132
F10510686
H1464281
I83436
J102798
K921147
Q1195943
W2062106
R7782128
T4411915
U4914962
Y949088
O10572133
P87109123
L125140149
M14822102
pd.concat([df1,df3],axis = 1) # axis = 1表示列增加
PythonMathEnJavaChinese
A10874536181
B981647117117
C7177128484
D9123131149115
E259013211373
F1051068614026
H1464281117118
I8343610391
J1027984320
K9211479372
df1.append(df2) # append追加,在行后面直接進行追加
PythonC++MathEn
A10859.07453
B984.01647
C7127.077128
D917.0123131
E2560.090132
F105136.010686
H146112.04281
I83120.0436
J10228.0798
K9253.01147
Q119NaN5943
W20NaN62106
R77NaN82128
T44NaN11915
U49NaN14962
Y94NaN9088
O105NaN72133
P87NaN109123
L125NaN140149
M148NaN22102
df1.append(df3) # 出現空資料,原因在于:df1的列索引和df3列索引不一致
PythonC++MathEnJavaChinese
A108.059.074.053.0NaNNaN
B98.04.016.047.0NaNNaN
C71.027.077.0128.0NaNNaN
D9.017.0123.0131.0NaNNaN
E25.060.090.0132.0NaNNaN
F105.0136.0106.086.0NaNNaN
H146.0112.042.081.0NaNNaN
I83.0120.04.036.0NaNNaN
J102.028.079.08.0NaNNaN
K92.053.011.047.0NaNNaN
ANaNNaNNaNNaN61.081.0
BNaNNaNNaNNaN117.0117.0
CNaNNaNNaNNaN48.04.0
DNaNNaNNaNNaN149.0115.0
ENaNNaNNaNNaN113.073.0
FNaNNaNNaNNaN140.026.0
HNaNNaNNaNNaN117.0118.0
INaNNaNNaNNaN103.091.0
JNaNNaNNaNNaN43.020.0
KNaNNaNNaNNaN93.072.0
pd.concat([df1,df3],axis = 0)
PythonC++MathEnJavaChinese
A108.059.074.053.0NaNNaN
B98.04.016.047.0NaNNaN
C71.027.077.0128.0NaNNaN
D9.017.0123.0131.0NaNNaN
E25.060.090.0132.0NaNNaN
F105.0136.0106.086.0NaNNaN
H146.0112.042.081.0NaNNaN
I83.0120.04.036.0NaNNaN
J102.028.079.08.0NaNNaN
K92.053.011.047.0NaNNaN
ANaNNaNNaNNaN61.081.0
BNaNNaNNaNNaN117.0117.0
CNaNNaNNaNNaN48.04.0
DNaNNaNNaNNaN149.0115.0
ENaNNaNNaNNaN113.073.0
FNaNNaNNaNNaN140.026.0
HNaNNaNNaNNaN117.0118.0
INaNNaNNaNNaN103.091.0
JNaNNaNNaNNaN43.020.0
KNaNNaNNaNNaN93.072.0

5.2 資料插入

df1
PythonMathEn
A1087453
B981647
C7177128
D9123131
E2590132
F10510686
H1464281
I83436
J102798
K921147
df1.insert(loc = 1, # 插入位置
           column='C++', # 插入一列,這一列名字
           value = np.random.randint(0,151,size = 10)) # 插入的值
df1
PythonC++MathEn
A108597453
B9841647
C712777128
D917123131
E256090132
F10513610686
H1461124281
I83120436
J10228798
K92531147

5.3 Join SQL風格合并

df1 = pd.DataFrame(data = {'name':['softpo','Brandon','Ella','Daniel','張三'],
                           'height':[175,180,169,177,168]}) # 身高
df2 = pd.DataFrame(data = {'name':['softpo','Brandon','Ella','Daniel','李四'],
                           'weight':[70,65,74,63,88]}) # 體重
df3 = pd.DataFrame(data = {'名字':['softpo','Brandon','Ella','Daniel','張三'],
                           'salary':np.random.randint(20,100,size = 5)}) # 薪水
display(df1,df2,df3)
nameheight
0softpo175
1Brandon180
2Ella169
3Daniel177
4張三168
nameweight
0softpo70
1Brandon65
2Ella74
3Daniel63
4李四88
名字salary
0softpo64
1Brandon48
2Ella25
3Daniel26
4張三96
pd.concat([df1,df2],axis = 1)
nameheightnameweight
0softpo175softpo70
1Brandon180Brandon65
2Ella169Ella74
3Daniel177Daniel63
4張三168李四88
# 根據共同的屬性,合并資料
# df1 和 df2 共同屬性:name
# 資料庫,合并join 共同key
# inner內合并
pd.merge(df1,df2,how = 'inner') # 根據共同name進行合并,兩表合并,外鍵
nameheightweight
0softpo17570
1Brandon18065
2Ella16974
3Daniel17763
pd.merge(df1,df2,how = 'outer') # 外合并,所有資料保留,不對應位置,填充了空資料
nameheightweight
0softpo175.070.0
1Brandon180.065.0
2Ella169.074.0
3Daniel177.063.0
4張三168.0NaN
5李四NaN88.0
pd.merge(df1,df2,how = 'left')
nameheightweight
0softpo17570.0
1Brandon18065.0
2Ella16974.0
3Daniel17763.0
4張三168NaN
pd.merge(df1,df3,left_on='name',right_on='名字')
nameheight名字salary
0softpo175softpo64
1Brandon180Brandon48
2Ella169Ella25
3Daniel177Daniel26
4張三168張三96
df4 = pd.DataFrame(data = np.random.randint(0,151,size = (10,3)),
                   columns=['Python','Math','En'],index = list('ABCDEFHIJK'))
df4
PythonMathEn
A71789
B14511640
C56150139
D886641
E87139117
F1414518
H93119114
I110892
J23596
K125599
score_mean = df4.mean(axis = 1).round(1)
score_mean
A     55.7
B    100.3
C    115.0
D     65.0
E    114.3
F     68.0
H    108.7
I     67.0
J     44.3
K     64.3
dtype: float64
df4.insert(loc = 2,column='平均分',value=score_mean)
df4
PythonMath平均分En
A71755.789
B145116100.340
C56150115.0139
D886665.041
E87139114.3117
F1414568.018
H93119108.7114
I1108967.02
J23544.396
K1255964.39
df5 = df4.iloc[:,[0,1,3]]
df5
PythonMathEn
A71789
B14511640
C56150139
D886641
E87139117
F1414518
H93119114
I110892
J23596
K125599
score_mean.name = '平均分'
score_mean
A     55.7
B    100.3
C    115.0
D     65.0
E    114.3
F     68.0
H    108.7
I     67.0
J     44.3
K     64.3
Name: 平均分, dtype: float64
df5
PythonMathEn
A71789
B14511640
C56150139
D886641
E87139117
F1414518
H93119114
I110892
J23596
K125599
pd.merge(df5,score_mean,
         left_index=True, # 資料合并根據行索引,對應
         right_index=True) # 右邊資料根據行索引,對應
PythonMathEn平均分
A7178955.7
B14511640100.3
C56150139115.0
D88664165.0
E87139117114.3
F141451868.0
H93119114108.7
I11089267.0
J2359644.3
K12559964.3

第六部分:資料清洗

df = pd.DataFrame(data = {'color':['red','blue','red','green','green','blue',None,np.NaN,'green'],
                          'price':[20,15,20,18,18,22,30,30,22]})
df
colorprice
0red20
1blue15
2red20
3green18
4green18
5blue22
6None30
7NaN30
8green22
# 重復資料洗掉
df.drop_duplicates() # 非重復資料,索引7和索引6重復資料,None和NaN一回事
colorprice
0red20
1blue15
3green18
5blue22
6None30
8green22
df
colorprice
0red20
1blue15
2red20
3green18
4green18
5blue22
6None30
7NaN30
8green22
df.dropna() # 空資料過濾
colorprice
0red20
1blue15
2red20
3green18
4green18
5blue22
8green22
# 洗掉行,或者列
df.drop(labels=[2,4,6,8]) # 默認情況下洗掉行
colorprice
0red20
1blue15
3green18
5blue22
7NaN30
# 洗掉指定的列
df.drop(labels='color',axis = 1) # 洗掉列,axis = 1
price
020
115
220
318
418
522
630
730
822
df.filter(items=['price']) # 引數意思,保留資料price
price
020
115
220
318
418
522
630
730
822
df['size'] = 1024 # 廣播
df
colorpricesize
0red201024
1blue151024
2red201024
3green181024
4green181024
5blue221024
6None301024
7NaN301024
8green221024
df.filter(like = 'i') # 模糊匹配,保留了帶有i這個字母的索引
pricesize
0201024
1151024
2201024
3181024
4181024
5221024
6301024
7301024
8221024
df['hello'] = 512
df
colorpricesizehello
0red201024512
1blue151024512
2red201024512
3green181024512
4green181024512
5blue221024512
6None301024512
7NaN301024512
8green221024512
# 正則運算式,方式很多
df.filter(regex = 'e$') # 正則運算式,正則運算式,限制e必須在最后
pricesize
0201024
1151024
2201024
3181024
4181024
5221024
6301024
7301024
8221024
df.filter(regex='e') # 只要帶有e全部選出來
pricesizehello
0201024512
1151024512
2201024512
3181024512
4181024512
5221024512
6301024512
7301024512
8221024512
# 例外值過濾
a = np.random.randint(0,1000,size = 200)
a
array([647, 871,  35, 738, 789, 587, 413, 559, 648, 993, 579, 129, 825,
       904, 356, 316, 997, 800,  35, 601,   1, 208, 465, 614, 680, 619,
       922, 346, 994, 135,   5, 650, 165, 475,  95, 194, 225, 455, 634,
       717, 836, 678, 156, 203, 263, 180, 143, 248, 407,  56, 202, 947,
        46, 408, 686, 530, 545, 273, 125, 964, 323, 775, 313, 238, 242,
       804, 228, 322, 322, 768, 556,   9, 629, 938, 932, 859, 955, 707,
       729, 541, 280, 493, 255, 681, 428, 992, 420, 650, 267,  32, 662,
       185, 756, 319, 313, 271, 229, 711, 803,  85, 527, 853, 670, 685,
       423, 458, 628, 701, 253, 495, 548, 879, 503, 115,  90, 978, 665,
       532, 198, 482, 412, 850, 879, 913,  96, 177, 778, 337, 502, 128,
        49, 747, 591,  22, 557, 105, 136, 775, 626, 515, 959, 869, 245,
       437,  51, 236, 438, 489, 854,  49, 163, 687, 488, 175, 428, 517,
       493, 377, 100, 728, 717, 926, 689, 186, 777, 639,  79,  83, 620,
       623, 931, 918, 721, 315, 133, 423, 161, 999, 341,  55, 837, 582,
       530, 805,  22, 301, 177, 322, 708,  14,  50, 864, 889, 929, 967,
       497, 624, 127, 539,  14])
# 例外值,大于800,小于 100算作例外,認為定義的,根據實際情況,
cond = (a <=800) & (a >=100)
a[cond]
array([647, 738, 789, 587, 413, 559, 648, 579, 129, 356, 316, 800, 601,
       208, 465, 614, 680, 619, 346, 135, 650, 165, 475, 194, 225, 455,
       634, 717, 678, 156, 203, 263, 180, 143, 248, 407, 202, 408, 686,
       530, 545, 273, 125, 323, 775, 313, 238, 242, 228, 322, 322, 768,
       556, 629, 707, 729, 541, 280, 493, 255, 681, 428, 420, 650, 267,
       662, 185, 756, 319, 313, 271, 229, 711, 527, 670, 685, 423, 458,
       628, 701, 253, 495, 548, 503, 115, 665, 532, 198, 482, 412, 177,
       778, 337, 502, 128, 747, 591, 557, 105, 136, 775, 626, 515, 245,
       437, 236, 438, 489, 163, 687, 488, 175, 428, 517, 493, 377, 100,
       728, 717, 689, 186, 777, 639, 620, 623, 721, 315, 133, 423, 161,
       341, 582, 530, 301, 177, 322, 708, 497, 624, 127, 539])
# 正態分布,平均值是0,標準差是1
b = np.random.randn(100000)
b
array([-1.17335196,  2.02215212, -0.29891071, ..., -1.6762474 ,
       -1.27071523, -1.15187761])
# 過濾例外值 
cond = np.abs(b) > 3*1 # 這些例外值,找到了
b[cond]
array([ 3.46554243,  3.08127362,  3.55119821,  3.62774922,  3.11823028,
        3.22620922, -3.10381164, -3.20067563, -3.04607325, -3.04427703,
        3.09111414, -3.28220862,  3.00499105, -3.06179762, -3.17331972,
       -3.37172359,  3.93766782, -3.22895232, -3.13737479,  3.07612751,
       -3.43215209, -3.27660651, -3.35116041,  4.74328695,  3.25586636,
       -3.54090785,  3.08881127,  3.00635551,  3.5018534 , -3.14463788,
       -3.0182886 , -3.12145648, -3.24276219,  3.08087834,  3.04820238,
       -3.24173442, -3.14648209,  3.87748281, -3.07660111, -3.16083928,
        3.32641202, -3.05228179,  3.04924043,  3.02825131, -3.08360056,
       -3.04890894, -3.27258041, -3.07339115, -3.38375287, -3.14267022,
       -3.7207377 ,  3.4813841 , -3.12866105, -3.17122631,  3.0599701 ,
        3.12393087,  3.20253178, -3.05221958, -3.35532417,  3.02450167,
       -3.28385568,  3.3422833 , -3.11052755, -3.09647003,  3.32353664,
       -3.70215812, -3.07916575, -3.13546874,  3.20575826, -3.67982084,
       -3.17055893,  3.4836615 , -3.30039879, -3.27774497,  3.02125912,
        3.12332885,  3.01456477,  3.15958151, -3.34101369,  3.32444673,
        3.06479889,  3.14506863,  3.15670827,  3.15066995,  3.14705869,
       -3.20526898, -3.0761338 ,  3.20716127, -3.20941307, -3.7212859 ,
       -3.51785834, -3.06096986, -3.05425748, -3.47049261,  3.22285172,
       -3.32233224, -3.04630606,  3.41215312, -3.16482337, -3.01813609,
       -3.05441573, -3.10394416,  3.03469642,  3.01493847, -3.11901071,
        3.5996865 ,  3.48194227, -3.77734847,  3.04588004,  3.10611158,
       -3.20473003, -3.4377999 ,  3.22680244, -3.1536921 , -3.22798726,
        3.34569796,  3.06046948, -3.16955677,  3.12613756,  3.04286964,
        3.01148054,  3.18525226, -4.08971624, -3.55427596, -5.39879049,
        3.05203254,  3.08944491, -3.02258209,  3.17316913, -3.1615401 ,
        3.17205118, -3.24221772, -3.14421237, -3.74675036,  3.61678522,
        3.59097443, -3.0302881 ,  3.23236707, -3.00850012,  3.33608986,
       -3.02859152, -3.7000766 , -3.10992575, -3.00412636, -3.05657102,
       -3.05208781,  3.14017797,  3.46457731,  3.15619413, -3.43236114,
        3.08259529, -3.84578168,  3.04203424, -3.29444028, -3.01764756,
        3.11300256,  3.23071233,  3.20785451, -3.15668756,  3.44176099,
       -3.19985577, -3.14126853, -3.26482841, -3.62208271, -3.55305069,
        3.09639491, -3.18178713, -3.03662021,  3.17247227,  3.3908074 ,
       -3.63563705, -3.56417097,  3.02823554, -3.06955375,  3.74305364,
        3.63993306, -3.14193492, -3.04032527, -3.28310908, -3.37949723,
       -3.25915912, -3.01206123, -3.10871377, -3.22982732,  3.8136103 ,
        3.48893313,  3.9918267 ,  3.4526763 , -3.46595488, -3.29996013,
       -3.42965097,  3.151502  ,  3.10548689, -3.44707735,  3.21881565,
        3.50932999, -3.12410382,  3.30296386,  3.02454576, -3.20072608,
        3.54339754, -3.17847739, -3.21475045,  3.03546088, -3.06225619,
        3.48158164,  3.15243123, -3.06358376,  3.27300242,  3.32577453,
        3.23535167, -3.04681725,  3.33439387,  3.10620079,  3.52883469,
       -3.1790272 ,  3.02641222, -3.45636819,  3.21009424,  3.08045954,
       -3.59721754,  3.24693695,  3.05920919, -3.43674159, -3.00370946,
       -3.48031594, -3.28748467,  3.42581649,  3.46912521, -3.28384157,
        3.76358974, -3.34035865,  3.12978233,  3.44856854, -3.04074246,
        3.50018071,  3.33188267, -3.09775514, -3.49356906, -3.09902374,
        3.12068562, -3.1776565 , -3.44282129,  3.19286374, -3.28304596,
       -3.10080963, -3.37189709,  3.77743156,  3.03547536,  3.22045459,
       -3.44007263,  3.01331408,  3.49733677,  3.28831922,  3.62147013,
        3.03458981,  3.15447237, -3.33931478,  3.09858431, -3.23592306,
        3.3144797 ,  3.37067342, -3.18749118,  3.09319307, -3.34390567,
        3.29819563,  3.3120354 ,  3.04166958, -3.00975323,  3.0347423 ,
       -3.82502331, -3.13125028, -3.0876424 ,  3.13929221,  3.570775  ,
       -3.37420738,  3.17527797,  3.13396148, -3.70088631, -3.04054948,
        3.05399103,  3.24908851,  3.19666266, -3.64071456, -3.85271081,
        3.06864652,  3.53367592,  3.54650649,  3.6355438 ,  3.657715  ,
        4.03831601,  3.61651925])

第七部分:資料轉換

7.1 軸和元素轉換

import numpy as np
import pandas as pd
df = pd.DataFrame(data = np.random.randint(0,10,size = (10,3)),
                  columns=['Python','Tensorflow','Keras'],
                  index = list('ABCDEFHIJK'))
df
PythonTensorflowKeras
A253
B500
C704
D047
E869
F826
H678
I769
J479
K671
df.rename(index = {'A':'X','K':'Y'}, # 行索引
          columns={'Python':'人工智能'}, # 列索引修改
          inplace=True) # 替換原資料
df.replace(5,50,inplace=True)
df
人工智能TensorflowKeras
X2503
B5000
C704
D047
E869
F826
H678
I769
J479
Y671
df.replace([2,7],1024,inplace=True)
df
人工智能TensorflowKeras
X1024503
B5000
C102404
D041024
E869
F810246
H610248
I102469
J410249
Y610241
df.iloc[4,2] = np.NaN # 空資料
df.replace({0:2048,np.nan:-100},inplace=True)
df
人工智能TensorflowKeras
X1024503.0
B5020482048.0
C102420484.0
D204841024.0
E86-100.0
F810246.0
H610248.0
I102469.0
J410249.0
Y610241.0
df.replace({'Tensorflow':1024},-1024) # 指定某一列,進行資料替換
人工智能TensorflowKeras
X1024503.0
B5020482048.0
C102420484.0
D204841024.0
E86-100.0
F8-10246.0
H6-10248.0
I102469.0
J4-10249.0
Y6-10241.0

7.2 map映射元素轉變

# map 只能針對一列,就是Series
# 有一些沒有對應,那么回傳就是空資料
df['人工智能'].map({1024:3.14,2048:2.718,6:1108}) # 跟據字典對資料進行改變
X       3.140
B         NaN
C       3.140
D       2.718
E         NaN
F         NaN
H    1108.000
I       3.140
J         NaN
Y    1108.000
Name: 人工智能, dtype: float64
df['Keras'].map(lambda x :True if x > 0 else False) # 如果大于 0 回傳True,不然回傳False
X     True
B     True
C     True
D     True
E    False
F     True
H     True
I     True
J     True
Y     True
Name: Keras, dtype: bool
def convert(x):
    if x >= 1024:
        return True
    else:
        return False
df['level'] = df['Tensorflow'].map(convert) # map映射,映射是Tensorflow中這一列中每一個資料,傳遞到方法中
df
人工智能TensorflowKeraslevel
X1024503.0False
B5020482048.0True
C102420484.0True
D204841024.0False
E86-100.0False
F810246.0True
H610248.0True
I102469.0False
J410249.0True
Y610241.0True

7.3 apply映射元素轉變

# 既可以操作Series又可以操作DataFrame
df['人工智能'].apply(lambda x : x + 100)
X    1124
B     150
C    1124
D    2148
E     108
F     108
H     106
I    1124
J     104
Y     106
Name: 人工智能, dtype: int64
df['level'].apply(lambda x:1 if x else 0)
X    0
B    1
C    1
D    0
E    0
F    1
H    1
I    0
J    1
Y    1
Name: level, dtype: int64
df.apply(lambda x : x + 1000) # apply對 所有的資料進行映射
人工智能TensorflowKeraslevel
X202410501003.01000
B105030483048.01001
C202430481004.01001
D304810042024.01000
E10081006900.01000
F100820241006.01001
H100620241008.01001
I202410061009.01000
J100420241009.01001
Y100620241001.01001
def convert(x):
    return (x.median(),x.count(),x.min(),x.max(),x.std()) # 回傳中位數,回傳的是計數
df.apply(convert).round(1) # 默認操作列資料
人工智能TensorflowKeraslevel
029.01024.07.01
110.010.010.010
24.04.0-100.0False
32048.02048.02048.0True
4717.8800.4694.90.516398
df
人工智能TensorflowKeraslevel
X1024503.0False
B5020482048.0True
C102420484.0True
D204841024.0False
E86-100.0False
F810246.0True
H610248.0True
I102469.0False
J410249.0True
Y610241.0True
df.apply(convert,axis = 1) # axis = 1,操作資料就是行資料
X     (26.5, 4, False, 1024, 503.68732033541073)
B    (1049.0, 4, True, 2048, 1167.8622564326668)
C      (514.0, 4, True, 2048, 979.1007353689405)
D     (514.0, 4, False, 2048, 979.3623776042588)
E        (3.0, 4, -100.0, 8, 52.443620520834884)
F        (7.0, 4, True, 1024, 509.5085049993441)
H        (7.0, 4, True, 1024, 509.5085049993441)
I         (7.5, 4, False, 1024, 509.51373877453)
J        (6.5, 4, True, 1024, 509.6773489179208)
Y         (3.5, 4, 1.0, 1024, 510.6721061503164)
dtype: object

7.4 transform元素轉變

df = pd.DataFrame(np.random.randint(0,10,size = (10,3)),
                  columns=['Python','Tensorflow','Keras'],
                  index = list('ABCDEFHIJK'))
display(df)
# 可以針對一列資料,Series進行運算
df['Python'].transform(lambda x : 1024 if x > 5 else -1024) # 這個功能和map,apply類似的
PythonTensorflowKeras
A119
B691
C146
D951
E418
F257
H723
I789
J542
K707
A   -1024
B    1024
C   -1024
D    1024
E   -1024
F   -1024
H    1024
I    1024
J   -1024
K    1024
Name: Python, dtype: int64
df['Tensorflow'].apply([np.sqrt,np.square,np.cumsum]) # 針對一列,進行不同的操作
sqrtsquarecumsum
A1.00000011
B3.0000008110
C2.0000001614
D2.2360682519
E1.000000120
F2.2360682525
H1.414214427
I2.8284276435
J2.0000001639
K0.000000039
df['Tensorflow'].transform([np.sqrt,np.square,np.cumsum]) # 針對一列,進行不同的操作
sqrtsquarecumsum
A1.00000011
B3.0000008110
C2.0000001614
D2.2360682519
E1.000000120
F2.2360682525
H1.414214427
I2.8284276435
J2.0000001639
K0.000000039
def convert(x):
    if x > 5:
        return True
    else:
        return False
# 可以針對DataFrame進行運算
df.transform({'Python':np.cumsum,'Tensorflow':np.square,'Keras':convert}) # 對不同的列,執行不同的操作
PythonTensorflowKeras
A11True
B781False
C816True
D1725False
E211True
F2325True
H304False
I3764True
J4216False
K490True
df.apply({'Python':np.cumsum,'Tensorflow':np.square,'Keras':convert}) # 對不同的列,執行不同的操作
PythonTensorflowKeras
A11True
B781False
C816True
D1725False
E211True
F2325True
H304False
I3764True
J4216False
K490True

7.5 重排隨機抽樣啞變數

df
PythonTensorflowKeras
A119
B691
C146
D951
E418
F257
H723
I789
J542
K707
index = np.random.permutation(10) # 回傳打亂順訊的索引
index
array([3, 4, 1, 2, 7, 9, 0, 8, 5, 6])
# 重排,索引打亂
df.take(index)
PythonTensorflowKeras
D951
E418
B691
C146
I789
K707
A119
J542
F257
H723
# 從大量資料中隨機抽取資料
df.take(np.random.randint(0,10,size = 20)) # 隨機抽樣20個資料
PythonTensorflowKeras
J542
J542
D951
K707
H723
I789
J542
A119
C146
J542
I789
D951
I789
K707
A119
B691
H723
D951
B691
H723
df2 = pd.DataFrame(data = {'key':['a','b','a','b','c','b','c']})
df2
key
0a
1b
2a
3b
4c
5b
6c
# one-hot,啞變數
# str型別資料,經過啞變數變換可以使用數字表示
pd.get_dummies(df2,prefix='',prefix_sep='') # 1表示,有;0表示,沒有
abc
0100
1010
2100
3010
4001
5010
6001

第八部分:資料重塑

df
PythonTensorflowKeras
A119
B691
C146
D951
E418
F257
H723
I789
J542
K707
df.T # 轉置,行變列,列變行
ABCDEFHIJK
Python1619427757
Tensorflow1945152840
Keras9161873927
df2 = pd.DataFrame(np.random.randint(0,10,size = (20,3)),
                   columns=['Python','Math','En'],
                   index = pd.MultiIndex.from_product([list('ABCDEFHIJK'),['期中','期末']])) # 多層索引

df2
PythonMathEn
A期中330
期末658
B期中559
期末752
C期中079
期末975
D期中565
期末796
E期中739
期末914
F期中995
期末089
H期中700
期末166
I期中818
期末799
J期中508
期末366
K期中822
期末352
df2.unstack(level = 1) # 將行索引變成列索引,-1表示最后一層
PythonMathEn
期中期末期中期末期中期末
A363508
B575592
C097795
D576956
E793194
F909859
H710606
I871989
J530686
K832522
df2.unstack(level = -1) # 將行索引變成列索引,-1表示最后一層
PythonMathEn
期中期末期中期末期中期末
A363508
B575592
C097795
D576956
E793194
F909859
H710606
I871989
J530686
K832522
df2.stack() # 列變成行了
A  期中  Python    3
       Math      3
       En        0
   期末  Python    6
       Math      5
       En        8
B  期中  Python    5
       Math      5
       En        9
   期末  Python    7
       Math      5
       En        2
C  期中  Python    0
       Math      7
       En        9
   期末  Python    9
       Math      7
       En        5
D  期中  Python    5
       Math      6
       En        5
   期末  Python    7
       Math      9
       En        6
E  期中  Python    7
       Math      3
       En        9
   期末  Python    9
       Math      1
       En        4
F  期中  Python    9
       Math      9
       En        5
   期末  Python    0
       Math      8
       En        9
H  期中  Python    7
       Math      0
       En        0
   期末  Python    1
       Math      6
       En        6
I  期中  Python    8
       Math      1
       En        8
   期末  Python    7
       Math      9
       En        9
J  期中  Python    5
       Math      0
       En        8
   期末  Python    3
       Math      6
       En        6
K  期中  Python    8
       Math      2
       En        2
   期末  Python    3
       Math      5
       En        2
dtype: int64
df2.unstack().stack(level = 0)
期中期末
AEn08
Math35
Python36
BEn92
Math55
Python57
CEn95
Math77
Python09
DEn56
Math69
Python57
EEn94
Math31
Python79
FEn59
Math98
Python90
HEn06
Math06
Python71
IEn89
Math19
Python87
JEn86
Math06
Python53
KEn22
Math25
Python83
df2.mean() # 計算的是 列
Python    5.45
Math      4.85
En        5.60
dtype: float64
df2.mean(axis = 1)
A  期中    2.000000
   期末    6.333333
B  期中    6.333333
   期末    4.666667
C  期中    5.333333
   期末    7.000000
D  期中    5.333333
   期末    7.333333
E  期中    6.333333
   期末    4.666667
F  期中    7.666667
   期末    5.666667
H  期中    2.333333
   期末    4.333333
I  期中    5.666667
   期末    8.333333
J  期中    4.333333
   期末    5.000000
K  期中    4.000000
   期末    3.333333
dtype: float64
df2.mean(level=1) # 計算期中期末所有學生的平均分
PythonMathEn
期中5.73.65.5
期末5.26.15.7
df2.mean(level = 0) # 計算每位學生期中和期末平均分
PythonMathEn
A4.54.04.0
B6.05.05.5
C4.57.07.0
D6.07.55.5
E8.02.06.5
F4.58.57.0
H4.03.03.0
I7.55.08.5
J4.03.07.0
K5.53.52.0

第九部分:數學和統計方法

9.1 簡單統計指標

df = pd.DataFrame(np.random.randint(0,10,size = (20,3)),
                  columns=['Python','Math','En'],index = list('QWERTYUIOPASDFGHJKLZ'))
df
PythonMathEn
Q143
W820
E309
R989
T913
Y531
U580
I183
O035
P661
A040
S394
D528
F292
G198
H952
J575
K265
L273
Z298
df.iloc[6,2] = np.NAN
display(df)
PythonMathEn
Q143.0
W820.0
E309.0
R989.0
T913.0
Y531.0
U58NaN
I183.0
O035.0
P661.0
A040.0
S394.0
D528.0
F292.0
G198.0
H952.0
J575.0
K265.0
L273.0
Z298.0
df.count() # 統計非空資料數量
Python    20
Math      20
En        19
dtype: int64
display(df.mean(),df.median()) # 平均值,中位數
Python    3.900000
Math      5.500000
En        4.157895
dtype: float64



Python    3.0
Math      6.0
En        3.0
dtype: float64
display(df.min(),df.max()) # 最小值,最大值
Python    0.0
Math      0.0
En        0.0
dtype: float64



Python    9.0
Math      9.0
En        9.0
dtype: float64
df['Python'].unique() # 去除重復資料
array([1, 8, 3, 9, 5, 0, 6, 2])
df['Math'].value_counts() # 統計出現的頻次
9    4
8    3
7    2
6    2
4    2
3    2
2    2
5    1
1    1
0    1
Name: Math, dtype: int64
df.quantile(q = [0,0.25,0.5,0.75,1]) # 百分位數
PythonMathEn
0.000.000.00.0
0.251.753.02.0
0.503.006.03.0
0.755.258.06.5
1.009.009.09.0
df.describe().round(1)
PythonMathEn
count20.020.019.0
mean3.95.54.2
std3.02.93.0
min0.00.00.0
25%1.83.02.0
50%3.06.03.0
75%5.28.06.5
max9.09.09.0

9.2 索引標簽、位置獲取

df['Python'].argmax() # 回傳最大值索引
3
df['En'].argmin() # 最小值索引
1
df.idxmax() # 回傳最大值的標簽
Python    R
Math      S
En        E
dtype: object
df.idxmin() # 回傳最小值標簽
Python    O
Math      E
En        W
dtype: object

9.3 更多統計指標

df.cumsum() # 累加和
PythonMathEn
Q143.0
W963.0
E12612.0
R211421.0
T301524.0
Y351825.0
U4026NaN
I413428.0
O413733.0
P474334.0
A474734.0
S505638.0
D555846.0
F576748.0
G587656.0
H678158.0
J728863.0
K749468.0
L7610171.0
Z7811079.0
df.cumprod() # 累乘和
PythonMathEn
Q143.0
W880.0
E2400.0
R21600.0
T194400.0
Y972000.0
U486000NaN
I4860000.0
O000.0
P000.0
A000.0
S000.0
D000.0
F000.0
G000.0
H000.0
J000.0
K000.0
L000.0
Z000.0
df.cummin() # 累計最小值
PythonMathEn
Q143.0
W120.0
E100.0
R100.0
T100.0
Y100.0
U10NaN
I100.0
O000.0
P000.0
A000.0
S000.0
D000.0
F000.0
G000.0
H000.0
J000.0
K000.0
L000.0
Z000.0
df.cummax() # 累計最大值
PythonMathEn
Q143.0
W843.0
E849.0
R989.0
T989.0
Y989.0
U98NaN
I989.0
O989.0
P989.0
A989.0
S999.0
D999.0
F999.0
G999.0
H999.0
J999.0
K999.0
L999.0
Z999.0
df.std() # 標準差
Python    3.041814
Math      2.946898
En        3.004869
dtype: float64
df.var()
Python    9.252632
Math      8.684211
En        9.029240
dtype: float64
df.diff() # 差分,當前資料減去上一個的差值
PythonMathEn
QNaNNaNNaN
W7.0-2.0-3.0
E-5.0-2.09.0
R6.08.00.0
T0.0-7.0-6.0
Y-4.02.0-2.0
U0.05.0NaN
I-4.00.0NaN
O-1.0-5.02.0
P6.03.0-4.0
A-6.0-2.0-1.0
S3.05.04.0
D2.0-7.04.0
F-3.07.0-6.0
G-1.00.06.0
H8.0-4.0-6.0
J-4.02.03.0
K-3.0-1.00.0
L0.01.0-2.0
Z0.02.05.0
df.pct_change().round(3) # 計算百分比變化
PythonMathEn
QNaNNaNNaN
W7.000-0.500-1.000
E-0.625-1.000inf
R2.000inf0.000
T0.000-0.875-0.667
Y-0.4442.000-0.667
U0.0001.6670.000
I-0.8000.0002.000
O-1.000-0.6250.667
Pinf1.000-0.800
A-1.000-0.333-1.000
Sinf1.250inf
D0.667-0.7781.000
F-0.6003.500-0.750
G-0.5000.0003.000
H8.000-0.444-0.750
J-0.4440.4001.500
K-0.600-0.1430.000
L0.0000.167-0.400
Z0.0000.2861.667

9.4 高級統計指標

df.cov() # 協方差:自己和別人計算
PythonMathEn
Python9.252632-2.157895-0.695906
Math-2.1578958.6842111.160819
En-0.6959061.1608199.029240
df.var() # 方差: 自己和自己計算
Python    9.252632
Math      8.684211
En        9.029240
dtype: float64
df['Python'].cov(df['Math'])
-2.157894736842105
df.corr() # 相關性系數 -1 ~ 1
PythonMathEn
Python1.000000-0.240731-0.074376
Math-0.2407311.0000000.130217
En-0.0743760.1302171.000000
df.corrwith(df['En']) # 一列的相關性系數
Python   -0.074376
Math      0.130217
En        1.000000
dtype: float64

第十部分:排序

df = pd.DataFrame(np.random.randint(0,20,size = (20,3)),
                  columns=['Python','Tensorflow','Keras'],index = list('QWERTYUIOPASDFGHJKLZ'))
df
PythonTensorflowKeras
Q1734
W13187
E12110
R3514
T11157
Y5154
U1827
I736
O1185
P1260
A4184
S1558
D81114
F3217
G4178
H1214
J126
K17916
L11144
Z16134
df.sort_index(axis = 0,ascending=False) # 降序
PythonTensorflowKeras
Z16134
Y5154
W13187
U1827
T11157
S1558
R3514
Q1734
P1260
O1185
L11144
K17916
J126
I736
H1214
G4178
F3217
E12110
D81114
A4184
df.sort_index(ascending=True) # 升序
PythonTensorflowKeras
A4184
D81114
E12110
F3217
G4178
H1214
I736
J126
K17916
L11144
O1185
P1260
Q1734
R3514
S1558
T11157
U1827
W13187
Y5154
Z16134
df.sort_values(by = 'Python',ascending=True) # 根據Python屬性進行升序排列
PythonTensorflowKeras
J126
O1185
R3514
F3217
A4184
G4178
Y5154
I736
D81114
T11157
L11144
P1260
E12110
H1214
W13187
S1558
Z16134
K17916
Q1734
U1827
df.sort_values(by = ['Python','Tensorflow'],ascending=True) 
# 先根據Python進行排序,如果相等在根據Tensorflow排序
PythonTensorflowKeras
J126
O1185
F3217
R3514
G4178
A4184
Y5154
I736
D81114
L11144
T11157
H1214
P1260
E12110
W13187
S1558
Z16134
Q1734
K17916
U1827
df.nlargest(n = 5,columns='Python') # 根據Python進行排序,獲取最大的5個數值
PythonTensorflowKeras
U1827
Q1734
K17916
Z16134
S1558
df.nsmallest(5,columns='Keras') # 根據Keras進行排序,獲取最小的5個
PythonTensorflowKeras
E12110
P1260
Q1734
Y5154
A4184

結束語

本篇博文的代碼是在jupyter上運行的,不過具體在哪運行都沒什么大的區別,

感謝收看,祝學業和作業進步! 需要本文資料的話,歡迎關注評論留下你的郵箱,


推薦關注的專欄

👨?👩?👦?👦 機器學習:分享機器學習實戰專案和常用模型講解
👨?👩?👦?👦 資料分析:分享資料分析實戰專案和常用技能整理


關注我,了解更多相關知識!

CSDN@報告,今天也有好好學習

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/341898.html

標籤:python

上一篇:用 Python 教你畫花樣圖

下一篇:深度學習入門篇,簡單的實體講明白影像分類。

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more