免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

14個pandas神操作,手把手教你寫代碼(文末送書)

 wenxuefeng360 2021-07-27


導讀:Pandas是Python數(shù)據(jù)分析的利器,也是各種數(shù)據(jù)建模的標準工具。本文帶大家入門Pandas,將介紹Python語言、Python數(shù)據(jù)生態(tài)和Pandas的一些基本功能。

圖片

在Python語言應用生態(tài)中,數(shù)據(jù)科學領域近年來十分熱門。作為數(shù)據(jù)科學中一個非?;A的庫,Pandas受到了廣泛關注。Pandas可以將現(xiàn)實中來源多樣的數(shù)據(jù)進行靈活處理和分析。

01
Pandas是什么

很多初學者可能有這樣一個疑問:“我想學的是Python數(shù)據(jù)分析,為什么經(jīng)常會被引導到Pandas上去?”雖然這兩個東西都是以P開頭的,但它們并不是同一個層面的東西。簡單來說,Pandas是Python這門編程語言中一個專門用來做數(shù)據(jù)分析的工具,它們的關系如圖1所示。接下來我們就說說Python是什么,Pandas又是什么。

圖片

圖1 Pandas和Python的關系

Python簡介

Python是一門強大的編程語言,它簡單易學,提供眾多高級數(shù)據(jù)結構,讓我們可以面向?qū)ο缶幊?。Python是一門解釋型語言,語法優(yōu)雅貼近人類自然語言,符合人類的認知習慣。

Python支持跨平臺,能夠運行在所有的常見操作系統(tǒng)上。Python在近期熱門的大數(shù)據(jù)、科學研究、機器學習、人工智能等領域大顯身手,并且?guī)缀踉谒蓄I域都有應用,因此學習它十分劃算。

Python由荷蘭人吉多·范羅蘇姆(Guido van Rossum)創(chuàng)造,第一版發(fā)布于1991年。關于為何有Python這個項目,吉多·范羅蘇姆在1996年曾寫道:6年前,也就是1989年12月,我在尋找一門“課余”編程項目來打發(fā)圣誕節(jié)前后的時間。到時我的辦公室會關門,而我只有一臺家用電腦,沒有什么其他東西。我決定為我當時正在構思的新的腳本語言寫一個解釋器,它是ABC語言的后代,對UNIX/C程序員會有吸引力。當時我對項目叫什么名字并不太在乎,由于我是《蒙提·派森的飛行馬戲團》的狂熱愛好者,我就選擇了用Python作為項目的名字。

《蒙提·派森的飛行馬戲團》(Monty Python’s Flying Circus)是BBC播出的英國電視喜劇劇集,蒙提·派森(Monty Python)是創(chuàng)作該劇的六人喜劇團隊,由此可見,Python雖原意為蟒蛇,但吉多·范羅蘇姆用它來命名一門開發(fā)語言,并非出于他對蟒蛇的喜愛,大家不必恐懼。

Python 2.0于2000年10月16日發(fā)布。Python 3.0于2008年12月3日發(fā)布,此版不完全兼容之前的Python源代碼。目前Python的正式版已經(jīng)更新到3.9版本,且官方不再維護2.0版本,因此建議初學者(包括已經(jīng)在學習的)至少從3.6版本開始學習Python,之后的版本功能差異不會太大。

Pandas簡介

Pandas是使用Python語言開發(fā)的用于數(shù)據(jù)處理和數(shù)據(jù)分析的第三方庫。它擅長處理數(shù)字型數(shù)據(jù)和時間序列數(shù)據(jù),當然文本型的數(shù)據(jù)也能輕松處理。

作為Python的三方庫,Pandas是建構在Python的基礎上的,它封裝了一些復雜的代碼實現(xiàn)過程,我們只要調(diào)用它的方法就能輕松實現(xiàn)我們的需求。

Python中的庫、框架、包意義基本相同,都是別人造好的輪子,我們可以直接使用,以減少重復的邏輯代碼。正是由于有眾多覆蓋各個領域的框架,我們使用起Python來才能簡單高效,而不用關注技術實現(xiàn)細節(jié)。

Pandas由Wes McKinney于2008年開發(fā)。McKinney當時在紐約的一家金融服務機構工作,金融數(shù)據(jù)分析需要一個健壯和超快速的數(shù)據(jù)分析工具,于是他就開發(fā)出了Pandas。

Pandas的命名跟熊貓無關,而是來自計量經(jīng)濟學中的術語“面板數(shù)據(jù)”(Panel data)。面板數(shù)據(jù)是一種數(shù)據(jù)集的結構類型,具有橫截面和時間序列兩個維度。不過,我們不必了解它,它只是一種靈感、思想來源。Pandas目前已經(jīng)更新到1.2.1版本。

02
Pandas的使用人群

Pandas對數(shù)據(jù)的處理是為數(shù)據(jù)分析服務的,它所提供的各種數(shù)據(jù)處理方法、工具是基于數(shù)理統(tǒng)計學的,包含了日常應用中的眾多數(shù)據(jù)分析方法。我們學習它不僅要掌控它的相應技術,還要從它的數(shù)據(jù)處理思路中學習數(shù)據(jù)分析的理論和方法。

特別地,如果你想要成為數(shù)據(jù)分析師、數(shù)據(jù)產(chǎn)品經(jīng)理、數(shù)據(jù)開發(fā)工程師等與數(shù)據(jù)相關的工作者,學習Pandas能讓你深入數(shù)據(jù)理論和實踐,更好地理解和應用數(shù)據(jù)。

Pandas可以輕松應對白領們?nèi)粘9ぷ髦械母鞣N表格數(shù)據(jù)處理需求,還應用在金融、統(tǒng)計、數(shù)理研究、物理計算、社會科學、工程等領域。

Pandas可以實現(xiàn)復雜的處理邏輯,這些往往是Excel等工具無法完成的,還可以自動化、批量化,免去我們在處理相同的大量數(shù)據(jù)時的重復工作。

Pandas可以實現(xiàn)非常震撼的可視化效果,它對接眾多令人賞心悅目的可視化庫,可以實現(xiàn)動態(tài)數(shù)據(jù)交互效果。

03
Pandas的基本功能

Pandas常用的基本功能如下:

  • 從Excel、CSV、網(wǎng)頁、SQL、剪貼板等文件或工具中讀取數(shù)據(jù);

  • 合并多個文件或者電子表格中的數(shù)據(jù),將數(shù)據(jù)拆分為獨立文件;

  • 數(shù)據(jù)清洗,如去重、處理缺失值、填充默認值、補全格式、處理極端值等;

  • 建立高效的索引;

  • 支持大體量數(shù)據(jù);

  • 按一定業(yè)務邏輯插入計算后的列、刪除列;

  • 靈活方便的數(shù)據(jù)查詢、篩選;

  • 分組聚合數(shù)據(jù),可獨立指定分組后的各字段計算方式;

  • 數(shù)據(jù)的轉(zhuǎn)置,如行轉(zhuǎn)列、列轉(zhuǎn)行變更處理;

  • 連接數(shù)據(jù)庫,直接用SQL查詢數(shù)據(jù)并進行處理;

  • 對時序數(shù)據(jù)進行分組采樣,如按季、按月、按工作小時,也可以自定義周期,如工作日;

  • 窗口計算,移動窗口統(tǒng)計、日期移動等;

  • 靈活的可視化圖表輸出,支持所有的統(tǒng)計圖形;

  • 為數(shù)據(jù)表格增加展示樣式,提高數(shù)據(jù)識別效率。

04
Pandas快速入門

1、安裝導入

首先安裝pandas庫。打開“終端”并執(zhí)行以下命令:

pip install pandas matplotlib

# 如網(wǎng)絡慢,可指定國內(nèi)源快速下載安裝

pip install pandas matplotlib -i https://pypi.tuna./simple

安裝完成后,在終端中啟動Jupyter Notebook,給文件命名,如pandas-01。在Jupyter Notebook中導入Pandas,按慣例起別名pd:

# 引入 Pandas庫,按慣例起別名pd

import pandas as pd

這樣,我們就可以使用pd調(diào)用Pandas的所有功能了。

2、準備數(shù)據(jù)集

數(shù)據(jù)集(Data set或dataset),又稱為資料集、數(shù)據(jù)集合或資料集合,是一種由數(shù)據(jù)組成的集合,可以簡單理解成一個Excel表格。在分析處理數(shù)據(jù)時,我們要先了解數(shù)據(jù)集。對所持有數(shù)據(jù)各字段業(yè)務意義的理解是分析數(shù)據(jù)的前提。

介紹下我們后面會經(jīng)常用的數(shù)據(jù)集team.xlsx,可以從網(wǎng)址 https://www./file/data/dataset/team.xlsx下載。它的內(nèi)容見表1。

表1 team.xlsx的部分內(nèi)容

圖片

這是一個學生各季度成績總表(節(jié)選),各列說明如下。

  • name:學生的姓名,這列沒有重復值,一個學生一行,即一條數(shù)據(jù),共100條。

  • team:所在的團隊、班級,這個數(shù)據(jù)會重復。

  • Q1~Q4:各個季度的成績,可能會有重復值。

3、讀取數(shù)據(jù)

了解了數(shù)據(jù)集的意義后,我們將數(shù)據(jù)讀取到Pandas里,變量名用df(DataFrame的縮寫,后續(xù)會介紹),它是Pandas二維數(shù)據(jù)的基礎結構。

import pandas as pd # 引入Pandas庫,按慣例起別名pd



# 以下兩種效果一樣,如果是網(wǎng)址,它會自動將數(shù)據(jù)下載到內(nèi)存

df = pd.read_excel('https://www./file/data/dataset/team.xlsx')

df = pd.read_excel('team.xlsx') # 文件在notebook文件同一目錄下

# 如果是CSV,使用pd.read_csv(),還支持很多類型的數(shù)據(jù)讀取

這樣就把數(shù)據(jù)讀取到變量df中,輸入df看一下內(nèi)容,在Jupyter Notebook中的執(zhí)行效果如圖2所示。

圖片

圖2 讀取數(shù)據(jù)的執(zhí)行效果

其中:

  • 自動增加了第一列,是Pandas為數(shù)據(jù)增加的索引,從0開始,程序不知道我們真正的業(yè)務索引,往往需要后面重新指定,使它有一定的業(yè)務意義;

  • 由于數(shù)據(jù)量大,自動隱藏了中間部分,只顯示前后5條;

  • 底部顯示了行數(shù)和列數(shù)。


4、查看數(shù)據(jù)

讀取完數(shù)據(jù)后我們來查看一下數(shù)據(jù):

df.head() # 查看前5條,括號里可以寫明你想看的條數(shù)

df.tail() # 查看尾部5條

df.sample(5) # 隨機查看5條

查看前5條時的結果如圖3所示。

圖片

圖3 查看df前5條數(shù)據(jù)

5、驗證數(shù)據(jù)

拿到數(shù)據(jù),我們還需要驗證一下數(shù)據(jù)是否加載正確,數(shù)據(jù)大小是否正常。下面是一些常用的代碼,可以執(zhí)行看看效果(一次執(zhí)行一行):

df.shape # (100, 6) 查看行數(shù)和列數(shù)

df.info() # 查看索引、數(shù)據(jù)類型和內(nèi)存信息

df.describe() # 查看數(shù)值型列的匯總統(tǒng)計

df.dtypes # 查看各字段類型

df.axes # 顯示數(shù)據(jù)行和列名

df.columns # 列名

df.info()顯示有數(shù)據(jù)類型、索引情況、行列數(shù)、各字段數(shù)據(jù)類型、內(nèi)存占用等:

df.info()

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 100 entries, 0 to 99

Data columns (total 6 columns):

 #   Column  Non-Null Count  Dtype

---  ------  --------------  -----

 0   name    100 non-null    object

 1   team    100 non-null    object

 2   Q1      100 non-null    int64

 3   Q2      100 non-null    int64

 4   Q3      100 non-null    int64

 5   Q4      100 non-null    int64

dtypes: int64(4), object(2)

memory usage: 4.8+ KB

df.describe()會計算出各數(shù)字字段的總數(shù)(count)、平均數(shù)(mean)、標準差(std)、最小值(min)、四分位數(shù)和最大值(max):

Out:

               Q1          Q2          Q3          Q4

count  100.000000  100.000000  100.000000  100.000000

mean    49.200000   52.550000   52.670000   52.780000

std     29.962603   29.845181   26.543677   27.818524

min      1.000000    1.000000    1.000000    2.000000

25%     19.500000   26.750000   29.500000   29.500000

50%     51.500000   49.500000   55.000000   53.000000

75%     74.250000   77.750000   76.250000   75.250000

max     98.000000   99.000000   99.000000   99.000000

6、建立索引

以上數(shù)據(jù)真正業(yè)務意義上的索引是name列,所以我們需要使它成為索引:

df.set_index('name', inplace=True) # 建立索引并生效

其中可選參數(shù)inplace=True會將指定好索引的數(shù)據(jù)再賦值給df使索引生效,否則索引不會生效。注意,這里并沒有修改原Excel,從我們讀取數(shù)據(jù)后就已經(jīng)和它沒有關系了,我們處理的是內(nèi)存中的df變量。

將name建立索引后,就沒有從0開始的數(shù)字索引了,如圖4所示。

圖片

圖4 將name設置為索引的執(zhí)行效果

7、數(shù)據(jù)選取

接下來,我們像Excel那樣,對數(shù)據(jù)做一些篩選操作。

(1)選擇列

選擇列的方法如下:

# 查看指定列

df['Q1']

df.Q1 # 同上,如果列名符合Python變量名要求,可使用

顯示如下內(nèi)容:

df.Q1

Out:

0     89

1     36

2     57

3     93

4     65

      ..

95    48

96    21

97    98

98    11

99    21

Name: Q1, Length: 100, dtype: int64

這里返回的是一個Series類型數(shù)據(jù),可以理解為數(shù)列,它也是帶索引的。之前建立的索引在這里發(fā)揮出了作用,否則我們的索引是一個數(shù)字,無法知道與之對應的是誰的數(shù)據(jù)。

選擇多列的可以用以下方法:

# 選擇多列

df[['team', 'Q1']] # 只看這兩列,注意括號

df.loc[:, ['team', 'Q1']] # 和上一行效果一樣

df.loc[x, y]是一個非常強大的數(shù)據(jù)選擇函數(shù),其中x代表行,y代表列,行和列都支持條件表達式,也支持類似列表那樣的切片(如果要用自然索引,需要用df.iloc[])。下面的例子中會進行演示。

(2)選擇行

選擇行的方法如下:

# 用指定索引選取

df[df.index == 'Liver'] # 指定姓名



# 用自然索引選擇,類似列表的切片

df[0:3] # 取前三行

df[0:10:2] # 在前10個中每兩個取一個

df.iloc[:10,:] # 前10個

(3)指定行和列

同時給定行和列的顯示范圍:

df.loc['Ben', 'Q1':'Q4'] # 只看Ben的四個季度成績

df.loc['Eorge':'Alexander', 'team':'Q4'] # 指定行區(qū)間

(4)條件選擇

按一定的條件顯示數(shù)據(jù):

# 單一條件

df[df.Q1 > 90] # Q1列大于90的

df[df.team == 'C'] # team列為'C'的

df[df.index == 'Oscar'] # 指定索引即原數(shù)據(jù)中的name



# 組合條件

df[(df['Q1'] > 90) & (df['team'] == 'C')] # and關系

df[df['team'] == 'C'].loc[df.Q1>90] # 多重篩選

8、排序

Pandas的排序非常方便,示例如下:

df.sort_values(by='Q1') # 按Q1列數(shù)據(jù)升序排列

df.sort_values(by='Q1', ascending=False) # 降序



df.sort_values(['team', 'Q1'], ascending=[True, False]) # team升序,Q1降序

9、分組聚合

我們可以實現(xiàn)類似SQL的groupby那樣的數(shù)據(jù)透視功能:

df.groupby('team').sum() # 按團隊分組對應列相加

df.groupby('team').mean() # 按團隊分組對應列求平均

# 不同列不同的計算方法

df.groupby('team').agg({'Q1': sum,  # 總和

                        'Q2': 'count', # 總數(shù)

                        'Q3':'mean', # 平均

                        'Q4': max}) # 最大值

統(tǒng)一聚合執(zhí)行后的效果如圖5所示。

圖片

圖5 按team分組后求平均數(shù)

不同計算方法聚合執(zhí)行后的效果如圖6所示。

圖片

圖6 分組后每列用不同的方法聚合計算

10、數(shù)據(jù)轉(zhuǎn)換

對數(shù)據(jù)表進行轉(zhuǎn)置,對類似圖6中的數(shù)據(jù)以A-Q1、E-Q4兩點連成的折線為軸對數(shù)據(jù)進行翻轉(zhuǎn),效果如圖7所示,不過我們這里僅用sum聚合。

df.groupby('team').sum().T

圖片

圖7 對聚合后的數(shù)據(jù)進行翻轉(zhuǎn)

也可以試試以下代碼,看有什么效果:

df.groupby('team').sum().stack()

df.groupby('team').sum().unstack()

11、增加列

用Pandas增加一列非常方便,就與新定義一個字典的鍵值一樣。

df['one'] = 1 # 增加一個固定值的列

df['total'] = df.Q1 + df.Q2 + df.Q3 + df.Q4 # 增加總成績列

# 將計算得來的結果賦值給新列

df['total'] = df.loc[:,'Q1':'Q4'].apply(lambda x:sum(x), axis=1)

df['total'] = df.sum(axis=1) # 可以把所有為數(shù)字的列相加

df['avg'] = df.total/4 # 增加平均成績列

12、統(tǒng)計分析

根據(jù)你的數(shù)據(jù)分析目標,試著使用以下函數(shù),看看能得到什么結論。

df.mean() # 返回所有列的均值

df.mean(1) # 返回所有行的均值,下同

df.corr() # 返回列與列之間的相關系數(shù)

df.count() # 返回每一列中的非空值的個數(shù)

df.max() # 返回每一列的最大值

df.min() # 返回每一列的最小值

df.median() # 返回每一列的中位數(shù)

df.std() # 返回每一列的標準差

df.var() # 方差

s.mode() # 眾數(shù)

13、繪圖

Pandas利用plot()調(diào)用Matplotlib快速繪制出數(shù)據(jù)可視化圖形。注意,第一次使用plot()時可能需要執(zhí)行兩次才能顯示圖形。如圖8所示,可以使用plot()快速繪制折線圖。

df['Q1'].plot() # Q1成績的折線分布

圖片

圖8 利用plot()快速繪制折線圖

如圖9所示,可以先選擇要展示的數(shù)據(jù),再繪圖。

df.loc['Ben','Q1':'Q4'].plot() # ben四個季度的成績變化

圖片

圖9 選擇部分數(shù)據(jù)繪制折線圖

如圖10所示,可以使用plot.bar繪制柱狀圖。

df.loc[ 'Ben','Q1':'Q4'].plot.bar() # 柱狀圖

df.loc[ 'Ben','Q1':'Q4'].plot.barh() # 橫向柱狀圖

圖片

圖10 利用plot.bar繪制的柱狀圖

如果想繪制橫向柱狀圖,可以將bar更換為barh,如圖11所示。

圖片

圖11 利用barh繪制的橫向柱狀圖

對數(shù)據(jù)聚合計算后,可以繪制成多條折線圖,如圖12所示。

# 各Team四個季度總成績趨勢

df.groupby('team').sum().T.plot()

圖片

圖12 多條折線圖

也可以用pie繪制餅圖,如圖13所示。

# 各組人數(shù)對比

df.groupby('team').count().Q1.plot.pie()

圖片

圖13 餅圖的繪制效果

14、導出

可以非常輕松地導出Excel和CSV文件。

df.to_excel('team-done.xlsx') # 導出 Excel文件

df.to_csv('team-done.csv') # 導出 CSV文件

導出的文件位于notebook文件的同一目錄下,打開看看。

本文我們了解了編程語言Python的特點,為什么要學Python,Pandas庫的功能,快速感受了一下Pandas強大的數(shù)據(jù)處理和數(shù)據(jù)分析能力。這些是我們進入數(shù)據(jù)科學領域的基礎。

本文摘編于《深入淺出Pandas:利用Python進行數(shù)據(jù)處理與分析》,經(jīng)出版方授權發(fā)布。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多