欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請(qǐng)碼778899分享:Pandas用法詳解

柚子快報(bào)邀請(qǐng)碼778899分享:Pandas用法詳解

http://yzkb.51969.com/

文章目錄

教程特點(diǎn)閱讀條件 Pandas是什么

Pandas主要特點(diǎn)Pandas主要優(yōu)勢(shì)Pandas內(nèi)置數(shù)據(jù)結(jié)構(gòu) Pandas庫下載和安裝

Windows系統(tǒng)安裝Linux系統(tǒng)安裝

1) Ubuntu用戶2) Fedora用戶 MacOSX系統(tǒng)安裝 Pandas Series入門教程

創(chuàng)建Series對(duì)象

1) 創(chuàng)建一個(gè)空Series對(duì)象2) ndarray創(chuàng)建Series對(duì)象3) dict創(chuàng)建Series對(duì)象4) 標(biāo)量創(chuàng)建Series對(duì)象 訪問Series數(shù)據(jù)

1) 位置索引訪問2) 索引標(biāo)簽訪問 Series常用屬性

1) axes2) dtype3) empty4) ndim5) size6) values7) index Series常用方法

1) head()&tail()查看數(shù)據(jù)2) isnull()&nonull()檢測(cè)缺失值 Pandas DataFrame入門教程(圖解版)

認(rèn)識(shí)DataFrame結(jié)構(gòu)創(chuàng)建DataFrame對(duì)象

1) 創(chuàng)建空的DataFrame對(duì)象2) 列表創(chuàng)建DataFame對(duì)象3) 字典嵌套列表創(chuàng)建4) 列表嵌套字典創(chuàng)建DataFrame對(duì)象5) Series創(chuàng)建DataFrame對(duì)象 列索引操作DataFrame

1) 列索引選取數(shù)據(jù)列2) 列索引添加數(shù)據(jù)列3) 列索引刪除數(shù)據(jù)列 行索引操作DataFrame

1) 標(biāo)簽索引選取2) 整數(shù)索引選取3) 切片操作多行選取4) 添加數(shù)據(jù)行5) 刪除數(shù)據(jù)行 常用屬性和方法匯總

1) T(Transpose)轉(zhuǎn)置2) axes3) dtypes4) empty5) ndim6) shape7) size8) values9) head()&tail()查看數(shù)據(jù)10) shift()移動(dòng)行或列 Pandas Panel三維數(shù)據(jù)結(jié)構(gòu)

pandas.Panel()創(chuàng)建Panel 對(duì)象

1) 創(chuàng)建一個(gè)空Panel2) ndarray三維數(shù)組創(chuàng)建3) DataFrame創(chuàng)建 Panel中選取數(shù)據(jù)

1) 使用 items選取數(shù)據(jù) Python Pandas描述性統(tǒng)計(jì)

sum()求和mean()求均值std()求標(biāo)準(zhǔn)差數(shù)據(jù)匯總描述 Python Pandas繪圖教程(詳解版)

柱狀圖直方圖箱型圖區(qū)域圖散點(diǎn)圖餅狀圖 Pandas csv讀寫文件

read_csv()

1) 自定義索引2) 查看每一列的dtype3) 更改文件標(biāo)頭名4) 跳過指定的行數(shù) to_csv() Pandas Excel讀寫操作詳解

to_excel()read_excel() Pandas和NumPy的比較

創(chuàng)建數(shù)組布爾索引重塑數(shù)組形狀Pdans與NumPy區(qū)別轉(zhuǎn)換ndarray數(shù)組

Pandas 庫是一個(gè)免費(fèi)、開源的第三方 Python 庫,是 Python 數(shù)據(jù)分析必不可少的工具之一,它為 Python 數(shù)據(jù)分析提供了高性能,且易于使用的數(shù)據(jù)結(jié)構(gòu),即 Series 和 DataFrame。Pandas 自誕生后被應(yīng)用于眾多的領(lǐng)域,比如金融、統(tǒng)計(jì)學(xué)、社會(huì)科學(xué)、建筑工程等。

Pandas 庫基于 Python NumPy 庫開發(fā)而來,因此,它可以與 Python 的科學(xué)計(jì)算庫配合使用。Pandas 提供了兩種數(shù)據(jù)結(jié)構(gòu),分別是 Series(一維數(shù)組結(jié)構(gòu))與 DataFrame(二維數(shù)組結(jié)構(gòu)),這兩種數(shù)據(jù)結(jié)構(gòu)極大地增強(qiáng)的了 Pandas 的數(shù)據(jù)分析能力。在本套教程中,我們將學(xué)習(xí) Python Pandas 的各種方法、特性以及如何在實(shí)踐中運(yùn)用它們。

教程特點(diǎn)

本套教程是為 Pandas 初學(xué)者打造的,學(xué)習(xí)完本套教程,您將在一定程度上掌握 Pandas 的基礎(chǔ)知識(shí),以及各種功能。如果您是從事數(shù)據(jù)分析的工作人員,那么這套教程會(huì)對(duì)您有所幫助。

本套教程對(duì) Python Pandas 庫進(jìn)行詳細(xì)地講解,包括文件讀寫、統(tǒng)計(jì)學(xué)函數(shù)、缺失值處理、以及數(shù)據(jù)可視化等重點(diǎn)知識(shí)。為了降低初學(xué)者的學(xué)習(xí)門檻,我們的教程盡量采用通俗易懂、深入淺出的語言風(fēng)格,相信通過對(duì)本套教程的學(xué)習(xí),您一定會(huì)收獲頗豐。

閱讀條件

在開始學(xué)習(xí)本套教程前,首先您應(yīng)該對(duì)于數(shù)據(jù)分析、數(shù)據(jù)可視化的概念有一定程度的了解,并且您已經(jīng)熟練掌握 Python 語言的基礎(chǔ)知識(shí)。其次,由于 Pandas 庫是在 NumPy 庫的基礎(chǔ)上構(gòu)建而來,所以建議您提前學(xué)習(xí)《Python NumPy教程》。

Pandas是什么

Pandas 是一個(gè)開源的第三方 Python 庫,從 Numpy 和 Matplotlib 的基礎(chǔ)上構(gòu)建而來,享有數(shù)據(jù)分析“三劍客之一”的盛名(NumPy、Matplotlib、Pandas)。Pandas 已經(jīng)成為 Python 數(shù)據(jù)分析的必備高級(jí)工具,它的目標(biāo)是成為強(qiáng)大、靈活、可以支持任何編程語言的數(shù)據(jù)分析工具。

圖1:Pandas Logo

Pandas 這個(gè)名字來源于面板數(shù)據(jù)(Panel Data)與數(shù)據(jù)分析(data analysis)這兩個(gè)名詞的組合。在經(jīng)濟(jì)學(xué)中,Panel Data 是一個(gè)關(guān)于多維數(shù)據(jù)集的術(shù)語。Pandas 最初被應(yīng)用于金融量化交易領(lǐng)域,現(xiàn)在它的應(yīng)用領(lǐng)域更加廣泛,涵蓋了農(nóng)業(yè)、工業(yè)、交通等許多行業(yè)。

Pandas 最初由 Wes McKinney(韋斯·麥金尼)于 2008 年開發(fā),并于 2009 年實(shí)現(xiàn)開源。目前,Pandas 由 PyData 團(tuán)隊(duì)進(jìn)行日常的開發(fā)和維護(hù)工作。在 2020 年 12 月,PyData 團(tuán)隊(duì)公布了最新的 Pandas 1.20 版本 。

在 Pandas 沒有出現(xiàn)之前,Python 在數(shù)據(jù)分析任務(wù)中主要承擔(dān)著數(shù)據(jù)采集和數(shù)據(jù)預(yù)處理的工作,但是這對(duì)數(shù)據(jù)分析的支持十分有限,并不能突出 Python 簡單、易上手的特點(diǎn)。Pandas 的出現(xiàn)使得 Python 做數(shù)據(jù)分析的能力得到了大幅度提升,它主要實(shí)現(xiàn)了數(shù)據(jù)分析的五個(gè)重要環(huán)節(jié):

加載數(shù)據(jù)整理數(shù)據(jù)操作數(shù)據(jù)構(gòu)建數(shù)據(jù)模型分析數(shù)據(jù)

Pandas主要特點(diǎn)

Pandas 主要包括以下幾個(gè)特點(diǎn):

它提供了一個(gè)簡單、高效、帶有默認(rèn)標(biāo)簽(也可以自定義標(biāo)簽)的 DataFrame 對(duì)象。能夠快速得從不同格式的文件中加載數(shù)據(jù)(比如 Excel、CSV 、SQL文件),然后將其轉(zhuǎn)換為可處理的對(duì)象;能夠按數(shù)據(jù)的行、列標(biāo)簽進(jìn)行分組,并對(duì)分組后的對(duì)象執(zhí)行聚合和轉(zhuǎn)換操作;能夠很方便地實(shí)現(xiàn)數(shù)據(jù)歸一化操作和缺失值處理;能夠很方便地對(duì) DataFrame 的數(shù)據(jù)列進(jìn)行增加、修改或者刪除的操作;能夠處理不同格式的數(shù)據(jù)集,比如矩陣數(shù)據(jù)、異構(gòu)數(shù)據(jù)表、時(shí)間序列等;提供了多種處理數(shù)據(jù)集的方式,比如構(gòu)建子集、切片、過濾、分組以及重新排序等。

上述知識(shí)點(diǎn)將在后續(xù)學(xué)習(xí)中為大家一一講解。

Pandas主要優(yōu)勢(shì)

與其它語言的數(shù)據(jù)分析包相比,Pandas 具有以下優(yōu)勢(shì):

Pandas 的 DataFrame 和 Series 構(gòu)建了適用于數(shù)據(jù)分析的存儲(chǔ)結(jié)構(gòu);Pandas 簡潔的 API 能夠讓你專注于代碼的核心層面;Pandas 實(shí)現(xiàn)了與其他庫的集成,比如 Scipy、scikit-learn 和 Matplotlib;Pandas 官方網(wǎng)站(點(diǎn)擊訪問)提供了完善資料支持,及其良好的社區(qū)環(huán)境。

Pandas內(nèi)置數(shù)據(jù)結(jié)構(gòu)

我們知道,構(gòu)建和處理二維、多維數(shù)組是一項(xiàng)繁瑣的任務(wù)。Pandas 為解決這一問題, 在 ndarray 數(shù)組(NumPy 中的數(shù)組)的基礎(chǔ)上構(gòu)建出了兩種不同的數(shù)據(jù)結(jié)構(gòu),分別是 Series(一維數(shù)據(jù)結(jié)構(gòu))DataFrame(二維數(shù)據(jù)結(jié)構(gòu)):

Series 是帶標(biāo)簽的一維數(shù)組,這里的標(biāo)簽可以理解為索引,但這個(gè)索引并不局限于整數(shù),它也可以是字符類型,比如 a、b、c 等;DataFrame 是一種表格型數(shù)據(jù)結(jié)構(gòu),它既有行標(biāo)簽,又有列標(biāo)簽。

下面對(duì)上述數(shù)據(jù)結(jié)構(gòu)做簡單地的說明:

數(shù)據(jù)結(jié)構(gòu)維度說明Series1該結(jié)構(gòu)能夠存儲(chǔ)各種數(shù)據(jù)類型,比如字符數(shù)、整數(shù)、浮點(diǎn)數(shù)、Python 對(duì)象等,Series 用 name 和 index 屬性來描述 數(shù)據(jù)值。Series 是一維數(shù)據(jù)結(jié)構(gòu),因此其維數(shù)不可以改變。DataFrame2DataFrame 是一種二維表格型數(shù)據(jù)的結(jié)構(gòu),既有行索引,也有列索引。行索引是 index,列索引是 columns。 在創(chuàng)建該結(jié)構(gòu)時(shí),可以指定相應(yīng)的索引值。

由于上述數(shù)據(jù)結(jié)構(gòu)的存在,使得處理多維數(shù)組數(shù)任務(wù)變的簡單。在《Pandas Series入門教程》和《Pandas DataFrame入門教程(圖解)》兩節(jié)中,我們會(huì)對(duì)上述數(shù)據(jù)結(jié)構(gòu)做詳細(xì)講解。

注意,在 Pandas 0.25 版本后,Pamdas 廢棄了 Panel 數(shù)據(jù)結(jié)構(gòu),如果感興趣可閱讀《Pandas Panel三維數(shù)據(jù)結(jié)構(gòu)》一節(jié)。

Pandas庫下載和安裝

Python 官方標(biāo)準(zhǔn)發(fā)行版并沒有自帶 Pandas 庫,因此需要另行安裝。除了標(biāo)準(zhǔn)發(fā)行版外,還有一些第三方機(jī)構(gòu)發(fā)布的 Python 免費(fèi)發(fā)行版, 它們?cè)诠俜桨姹镜幕A(chǔ)上開發(fā)而來,并有針對(duì)性的提前安裝了一些 Python 模塊,從而滿足某些特定領(lǐng)域的需求,比如專門適應(yīng)于科學(xué)計(jì)算領(lǐng)域的 Anaconda,它就提前安裝了多款適用于科學(xué)計(jì)算的軟件包。

對(duì)于第三方發(fā)行版而言,它們已經(jīng)自帶 Pandas 庫,所以無須另行安裝。下面介紹了常用的免費(fèi)發(fā)行版:

Anaconda(官網(wǎng)下載:https://www.anaconda.com/)是一個(gè)開源的 Python 發(fā)行版,包含了 180 多個(gè)科學(xué)包及其依賴項(xiàng)。除了支持 Windows 系統(tǒng)外,也支持 Linux 和 Mac 系統(tǒng)。 Python(x,y)(下載地址:https://python-xy.github.io/)是一款基于 Python、Qt (圖形用戶界面)和 Spyder (交互式開發(fā)環(huán)境)開發(fā)的軟件,主要用于數(shù)值計(jì)算、數(shù)據(jù)分析和數(shù)據(jù)可視化等工程項(xiàng)目,目前只支持 Python 2 版本。 WinPython(下載地址:https://sourceforge.net/projects/winpython/files/)一個(gè)免費(fèi)的 Python 發(fā)行版,包含了常用的科學(xué)計(jì)算包與 Spyder IDE,但僅支持 Windows 系統(tǒng)。

下面介紹在不同操作系統(tǒng)環(huán)境下,標(biāo)準(zhǔn)發(fā)行版安裝 Pandas 的方法。

Windows系統(tǒng)安裝

使用 pip 包管理器安裝 Pandas,是最簡單的一種安裝方式。在 CMD 命令提示符界面行執(zhí)行以下命令:

pip install pandas

Linux系統(tǒng)安裝

對(duì)于不同的版本的 Linux 系統(tǒng),您可以采用它們各自的包管理器來安裝 Pandas。

1) Ubuntu用戶

Pandas 通常需要與其他軟件包一起使用,因此可采用以下命令,一次性安裝所有包:

sudo apt-get install numpy scipy matplotlib pandas

1

2) Fedora用戶

對(duì)于 Fedora 用戶而言,可采用以下命令安裝:

sudo yum install numpy scipy matplotlib pandas

1

MacOSX系統(tǒng)安裝

對(duì)于 Mac 用戶而言,同樣可以直接使用 pip 包管理器來安裝,命令如下:

pip install pandas

1

Pandas Series入門教程

Series 結(jié)構(gòu),也稱 Series 序列,是 Pandas 常用的數(shù)據(jù)結(jié)構(gòu)之一,它是一種類似于一維數(shù)組的結(jié)構(gòu),由一組數(shù)據(jù)值(value)和一組標(biāo)簽組成,其中標(biāo)簽與數(shù)據(jù)值之間是一一對(duì)應(yīng)的關(guān)系。

Series 可以保存任何數(shù)據(jù)類型,比如整數(shù)、字符串、浮點(diǎn)數(shù)、Python 對(duì)象等,它的標(biāo)簽?zāi)J(rèn)為整數(shù),從 0 開始依次遞增。Series 的結(jié)構(gòu)圖,如下所示:

通過標(biāo)簽我們可以更加直觀地查看數(shù)據(jù)所在的索引位置。

創(chuàng)建Series對(duì)象

Pandas 使用 Series() 函數(shù)來創(chuàng)建 Series 對(duì)象,通過這個(gè)對(duì)象可以調(diào)用相應(yīng)的方法和屬性,從而達(dá)到處理數(shù)據(jù)的目的:

import pandas as pd

s=pd.Series( data, index, dtype, copy)

12

參數(shù)說明如下所示:

參數(shù)名稱描述data輸入的數(shù)據(jù),可以是列表、常量、ndarray 數(shù)組等。index索引值必須是惟一的,如果沒有傳遞索引,則默認(rèn)為 np.arrange(n)。dtypedtype表示數(shù)據(jù)類型,如果沒有提供,則會(huì)自動(dòng)判斷得出。copy表示對(duì) data 進(jìn)行拷貝,默認(rèn)為 False。

我們也可以使用數(shù)組、字典、標(biāo)量值或者 Python 對(duì)象來創(chuàng)建 Series 對(duì)象。下面展示了創(chuàng)建 Series 對(duì)象的不同方法:

1) 創(chuàng)建一個(gè)空Series對(duì)象

使用以下方法可以創(chuàng)建一個(gè)空的 Series 對(duì)象,如下所示:

import pandas as pd

#輸出數(shù)據(jù)為空

s = pd.Series()

print(s)

1234

輸出結(jié)果如下:

Series([], dtype: float64)

2) ndarray創(chuàng)建Series對(duì)象

ndarray 是 NumPy 中的數(shù)組類型,當(dāng) data 是 ndarry 時(shí),傳遞的索引必須具有與數(shù)組相同的長度。假如沒有給 index 參數(shù)傳參,在默認(rèn)情況下,索引值將使用是 range(n) 生成,其中 n 代表數(shù)組長度,如下所示:

[0,1,2,3…. range(len(array))-1]

使用默認(rèn)索引,創(chuàng)建 Series 序列對(duì)象:

import pandas as pd

import numpy as np

data = np.array(['a','b','c','d'])

s = pd.Series(data)

print (s)

12345

輸出結(jié)果如下:

0 a

1 b

2 c

3 d

dtype: object

12345

上述示例中沒有傳遞任何索引,所以索引默認(rèn)從 0 開始分配 ,其索引范圍為 0 到len(data)-1,即 0 到 3。這種設(shè)置方式被稱為“隱式索引”。

除了上述方法外,你也可以使用“顯式索引”的方法定義索引標(biāo)簽,示例如下:

import pandas as pd

import numpy as np

data = np.array(['a','b','c','d'])

#自定義索引標(biāo)簽(即顯示索引)

s = pd.Series(data,index=[100,101,102,103])

print(s)

123456

輸出結(jié)果:

100 a

101 b

102 c

103 d

dtype: object

12345

3) dict創(chuàng)建Series對(duì)象

您可以把 dict 作為輸入數(shù)據(jù)。如果沒有傳入索引時(shí)會(huì)按照字典的鍵來構(gòu)造索引;反之,當(dāng)傳遞了索引時(shí)需要將索引標(biāo)簽與字典中的值一一對(duì)應(yīng)。

下面兩組示例分別對(duì)上述兩種情況做了演示。

示例1,沒有傳遞索引時(shí):

import pandas as pd

import numpy as np

data = {'a' : 0., 'b' : 1., 'c' : 2.}

s = pd.Series(data)

print(s)

12345

輸出結(jié)果:

a 0.0

b 1.0

c 2.0

dtype: float64

1234

示例 2,為index參數(shù)傳遞索引時(shí):

import pandas as pd

import numpy as np

data = {'a' : 0., 'b' : 1., 'c' : 2.}

s = pd.Series(data,index=['b','c','d','a'])

print(s)

12345

輸出結(jié)果:

b 1.0

c 2.0

d NaN

a 0.0

dtype: float64

12345

當(dāng)傳遞的索引值無法找到與其對(duì)應(yīng)的值時(shí),使用 NaN(非數(shù)字)填充。

4) 標(biāo)量創(chuàng)建Series對(duì)象

如果 data 是標(biāo)量值,則必須提供索引,示例如下:

import pandas as pd

import numpy as np

s = pd.Series(5, index=[0, 1, 2, 3])

print(s)

1234

輸出如下:

0 5

1 5

2 5

3 5

dtype: int64

12345

標(biāo)量值按照 index 的數(shù)量進(jìn)行重復(fù),并與其一一對(duì)應(yīng)。

訪問Series數(shù)據(jù)

上述講解了創(chuàng)建 Series 對(duì)象的多種方式,那么我們應(yīng)該如何訪問 Series 序列中元素呢?分為兩種方式,一種是位置索引訪問;另一種是索引標(biāo)簽訪問。

1) 位置索引訪問

這種訪問方式與 ndarray 和 list 相同,使用元素自身的下標(biāo)進(jìn)行訪問。我們知道數(shù)組的索引計(jì)數(shù)從 0 開始,這表示第一個(gè)元素存儲(chǔ)在第 0 個(gè)索引位置上,以此類推,就可以獲得 Series 序列中的每個(gè)元素。下面看一組簡單的示例:

import pandas as pd

s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

print(s[0]) #位置下標(biāo)

print(s['a']) #標(biāo)簽下標(biāo)

1234

輸出結(jié)果:

1 1

通過切片的方式訪問 Series 序列中的數(shù)據(jù),示例如下:

import pandas as pd

s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

print(s[:3])

123

輸出結(jié)果:

a 1

b 2

c 3

dtype: int64

1234

如果想要獲取最后三個(gè)元素,也可以使用下面的方式:

import pandas as pd

s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

print(s[-3:])

123

輸出結(jié)果:

c 3

d 4

e 5

dtype: int64

1234

2) 索引標(biāo)簽訪問

Series 類似于固定大小的 dict,把 index 中的索引標(biāo)簽當(dāng)做 key,而把 Series 序列中的元素值當(dāng)做 value,然后通過 index 索引標(biāo)簽來訪問或者修改元素值。

示例1,使用索標(biāo)簽訪問單個(gè)元素值:

import pandas as pd

s = pd.Series([6,7,8,9,10],index = ['a','b','c','d','e'])

print(s['a'])

123

輸出結(jié)果:

6

示例 2,使用索引標(biāo)簽訪問多個(gè)元素值

import pandas as pd

s = pd.Series([6,7,8,9,10],index = ['a','b','c','d','e'])

print(s[['a','c','d']])

123

輸出結(jié)果:

a 6

c 8

d 9

dtype: int64

1234

示例3,如果使用了 index 中不包含的標(biāo)簽,則會(huì)觸發(fā)異常:

import pandas as pd

s = pd.Series([6,7,8,9,10],index = ['a','b','c','d','e'])

#不包含f值

print(s['f'])

1234

輸出結(jié)果:

......

KeyError: 'f'

12

Series常用屬性

下面我們介紹 Series 的常用屬性和方法。在下表列出了 Series 對(duì)象的常用屬性。

名稱屬性axes以列表的形式返回所有行索引標(biāo)簽。dtype返回對(duì)象的數(shù)據(jù)類型。empty返回一個(gè)空的 Series 對(duì)象。ndim返回輸入數(shù)據(jù)的維數(shù)。size返回輸入數(shù)據(jù)的元素?cái)?shù)量。values以 ndarray 的形式返回 Series 對(duì)象。index返回一個(gè)RangeIndex對(duì)象,用來描述索引的取值范圍。

現(xiàn)在創(chuàng)建一個(gè) Series 對(duì)象,并演示如何使用上述表格中的屬性。如下所示:

import pandas as pd

import numpy as np

s = pd.Series(np.random.randn(5))

print(s)

1234

輸出結(jié)果:

0 0.898097

1 0.730210

2 2.307401

3 -1.723065

4 0.346728

dtype: float64

123456

上述示例的行索引標(biāo)簽是 [0,1,2,3,4]。

1) axes

import pandas as pd

import numpy as np

s = pd.Series(np.random.randn(5))

print ("The axes are:")

print(s.axes)

12345

輸出結(jié)果

The axes are:

[RangeIndex(start=0, stop=5, step=1)]

12

2) dtype

import pandas as pd

import numpy as np

s = pd.Series(np.random.randn(5))

print ("The dtype is:")

print(s.dtype)

12345

輸出結(jié)果:

The dtype is:

float64

12

3) empty

返回一個(gè)布爾值,用于判斷數(shù)據(jù)對(duì)象是否為空。示例如下:

import pandas as pd

import numpy as np

s = pd.Series(np.random.randn(5))

print("是否為空對(duì)象?")

print (s.empty)

12345

輸出結(jié)果:

是否為空對(duì)象?

False

12

4) ndim

查看序列的維數(shù)。根據(jù)定義,Series 是一維數(shù)據(jù)結(jié)構(gòu),因此它始終返回 1。

import pandas as pd

import numpy as np

s = pd.Series(np.random.randn(5))

print (s)

print (s.ndim)

12345

輸出結(jié)果:

0 0.311485

1 1.748860

2 -0.022721

3 -0.129223

4 -0.489824

dtype: float64

1

1234567

5) size

返回 Series 對(duì)象的大小(長度)。

import pandas as pd

import numpy as np

s = pd.Series(np.random.randn(3))

print (s)

#series的長度大小

print(s.size)

123456

輸出結(jié)果:

0 -1.866261

1 -0.636726

2 0.586037

dtype: float64

3

12345

6) values

以數(shù)組的形式返回 Series 對(duì)象中的數(shù)據(jù)。

import pandas as pd

import numpy as np

s = pd.Series(np.random.randn(6))

print(s)

print("輸出series中數(shù)據(jù)")

print(s.values)

123456

輸出結(jié)果:

0 -0.502100

1 0.696194

2 -0.982063

3 0.416430

4 -1.384514

5 0.444303

dtype: float64

輸出series中數(shù)據(jù)

[-0.50210028 0.69619407 -0.98206327 0.41642976 -1.38451433 0.44430257]

123456789

7) index

該屬性用來查看 Series 中索引的取值范圍。示例如下:

#顯示索引

import pandas as pd

s=pd.Series([1,2,5,8],index=['a','b','c','d'])

print(s.index)

#隱式索引

s1=pd.Series([1,2,5,8])

print(s1.index)

1234567

輸出結(jié)果:

隱式索引:

Index(['a', 'b', 'c', 'd'], dtype='object')

顯示索引:

RangeIndex(start=0, stop=4, step=1)

1234

Series常用方法

1) head()&tail()查看數(shù)據(jù)

如果想要查看 Series 的某一部分?jǐn)?shù)據(jù),可以使用 head() 或者 tail() 方法。其中 head() 返回前 n 行數(shù)據(jù),默認(rèn)顯示前 5 行數(shù)據(jù)。示例如下:

import pandas as pd

import numpy as np

s = pd.Series(np.random.randn(5))

print ("The original series is:")

print (s)

#返回前三行數(shù)據(jù)

print (s.head(3))

1234567

輸出結(jié)果:

原系列輸出結(jié)果:

0 1.249679

1 0.636487

2 -0.987621

3 0.999613

4 1.607751

head(3)輸出:

dtype: float64

0 1.249679

1 0.636487

2 -0.987621

dtype: float64

tail() 返回的是后 n 行數(shù)據(jù),默認(rèn)為后 5 行。示例如下:

import pandas as pd

import numpy as np

s = pd.Series(np.random.randn(4))

#原series

print(s)

#輸出后兩行數(shù)據(jù)

輸出結(jié)果:

原Series輸出:

0 0.053340

1 2.165836

2 -0.719175

3 -0.035178

輸出后兩行數(shù)據(jù):

dtype: float64

2 -0.719175

3 -0.035178

dtype: float64

2) isnull()&nonull()檢測(cè)缺失值

isnull() 和 nonull() 用于檢測(cè) Series 中的缺失值。所謂缺失值,顧名思義就是值不存在、丟失、缺少。

isnull():如果為值不存在或者缺失,則返回 True。notnull():如果值不存在或者缺失,則返回 False。

其實(shí)不難理解,在實(shí)際的數(shù)據(jù)分析任物中,數(shù)據(jù)的收集往往要經(jīng)歷一個(gè)繁瑣的過程。在這個(gè)過程中難免會(huì)因?yàn)橐恍┎豢煽沽?,或者人為因素?dǎo)致數(shù)據(jù)丟失的現(xiàn)象。這時(shí),我們可以使用相應(yīng)的方法對(duì)缺失值進(jìn)行處理,比如均值插值、數(shù)據(jù)補(bǔ)齊等方法。上述兩個(gè)方法就是幫助我們檢測(cè)是否存在缺失值。示例如下:

import pandas as pd

#None代表缺失數(shù)據(jù)

s=pd.Series([1,2,5,None])

print(pd.isnull(s)) #是空值返回True

print(pd.notnull(s)) #空值返回False

12345

輸出結(jié)果:

0 False

1 False

2 False

3 True

dtype: bool

notnull(): 0 True 1 True 2 True 3 False dtype: bool

Pandas DataFrame入門教程(圖解版)

DataFrame 是 Pandas 的重要數(shù)據(jù)結(jié)構(gòu)之一,也是在使用 Pandas 進(jìn)行數(shù)據(jù)分析過程中最常用的結(jié)構(gòu)之一,可以這么說,掌握了 DataFrame 的用法,你就擁有了學(xué)習(xí)數(shù)據(jù)分析的基本能力。

認(rèn)識(shí)DataFrame結(jié)構(gòu)

DataFrame 一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),既有行標(biāo)簽(index),又有列標(biāo)簽(columns),它也被稱異構(gòu)數(shù)據(jù)表,所謂異構(gòu),指的是表格中每列的數(shù)據(jù)類型可以不同,比如可以是字符串、整型或者浮點(diǎn)型等。其結(jié)構(gòu)圖示意圖,如下所示:

表格中展示了某個(gè)銷售團(tuán)隊(duì)個(gè)人信息和績效評(píng)級(jí)(rating)的相關(guān)數(shù)據(jù)。數(shù)據(jù)以行和列形式來表示,其中每一列表示一個(gè)屬性,而每一行表示一個(gè)條目的信息。

下表展示了上述表格中每一列標(biāo)簽所描述數(shù)據(jù)的數(shù)據(jù)類型,如下所示:

ColumnTypenameStringageintegergenderStringratingFloat

DataFrame 的每一行數(shù)據(jù)都可以看成一個(gè) Series 結(jié)構(gòu),只不過,DataFrame 為這些行中每個(gè)數(shù)據(jù)值增加了一個(gè)列標(biāo)簽。因此 DataFrame 其實(shí)是從 Series 的基礎(chǔ)上演變而來。在數(shù)據(jù)分析任務(wù)中 DataFrame 的應(yīng)用非常廣泛,因?yàn)樗枋鰯?shù)據(jù)的更為清晰、直觀。

通過示例對(duì) DataFrame 結(jié)構(gòu)做進(jìn)一步講解。 下面展示了一張學(xué)生成績表,如下所示:

DataFrame 結(jié)構(gòu)類似于 Execl 的表格型,表格中列標(biāo)簽的含義如下所示:

Regd.No:表示登記的序列號(hào)Name:學(xué)生姓名Marks:學(xué)生分?jǐn)?shù)

同 Series 一樣,DataFrame 自帶行標(biāo)簽索引,默認(rèn)為“隱式索引”即從 0 開始依次遞增,行標(biāo)簽與 DataFrame 中的數(shù)據(jù)項(xiàng)一一對(duì)應(yīng)。上述表格的行標(biāo)簽從 0 到 5,共記錄了 5 條數(shù)據(jù)(圖中將行標(biāo)簽省略)。當(dāng)然你也可以用“顯式索引”的方式來設(shè)置行標(biāo)簽。

下面對(duì) DataFrame 數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)做簡單地總結(jié),如下所示:

DataFrame 每一列的標(biāo)簽值允許使用不同的數(shù)據(jù)類型;DataFrame 是表格型的數(shù)據(jù)結(jié)構(gòu),具有行和列;DataFrame 中的每個(gè)數(shù)據(jù)值都可以被修改。DataFrame 結(jié)構(gòu)的行數(shù)、列數(shù)允許增加或者刪除;DataFrame 有兩個(gè)方向的標(biāo)簽軸,分別是行標(biāo)簽和列標(biāo)簽;DataFrame 可以對(duì)行和列執(zhí)行算術(shù)運(yùn)算。

創(chuàng)建DataFrame對(duì)象

創(chuàng)建 DataFrame 對(duì)象的語法格式如下:

import pandas as pd

pd.DataFrame( data, index, columns, dtype, copy)

12

參數(shù)說明:

參數(shù)名稱說明data輸入的數(shù)據(jù),可以是 ndarray,series,list,dict,標(biāo)量以及一個(gè) DataFrame。index行標(biāo)簽,如果沒有傳遞 index 值,則默認(rèn)行標(biāo)簽是 np.arange(n),n 代表 data 的元素個(gè)數(shù)。columns列標(biāo)簽,如果沒有傳遞 columns 值,則默認(rèn)列標(biāo)簽是 np.arange(n)。dtypedtype表示每一列的數(shù)據(jù)類型。copy默認(rèn)為 False,表示復(fù)制數(shù)據(jù) data。

Pandas 提供了多種創(chuàng)建 DataFrame 對(duì)象的方式,主要包含以下五種,分別進(jìn)行介紹。

1) 創(chuàng)建空的DataFrame對(duì)象

使用下列方式創(chuàng)建一個(gè)空的 DataFrame,這是 DataFrame 最基本的創(chuàng)建方法。

import pandas as pd

df = pd.DataFrame()

print(df)

123

輸出結(jié)果如下:

Empty DataFrame

Columns: []

Index: []

123

2) 列表創(chuàng)建DataFame對(duì)象

可以使用單一列表或嵌套列表來創(chuàng)建一個(gè) DataFrame。

示例 1,單一列表創(chuàng)建 DataFrame:

import pandas as pd

data = [1,2,3,4,5]

df = pd.DataFrame(data)

print(df)

1234

輸出如下:

0

0 1

1 2

2 3

3 4

4 5

123456

示例 2,使用嵌套列表創(chuàng)建 DataFrame 對(duì)象:

import pandas as pd

data = [['Alex',10],['Bob',12],['Clarke',13]]

df = pd.DataFrame(data,columns=['Name','Age'])

print(df)

1234

輸出結(jié)果:

Name Age

0 Alex 10

1 Bob 12

2 Clarke 13

1234

示例 3,指定數(shù)值元素的數(shù)據(jù)類型為 float:

import pandas as pd

data = [['Alex',10],['Bob',12],['Clarke',13]]

df = pd.DataFrame(data,columns=['Name','Age'],dtype=float)

print(df)

1234

輸出結(jié)果:

Name Age

0 Alex 10.0

1 Bob 12.0

2 Clarke 13.0

1234

3) 字典嵌套列表創(chuàng)建

data 字典中,鍵對(duì)應(yīng)的值的元素長度必須相同(也就是列表長度相同)。如果傳遞了索引,那么索引的長度應(yīng)該等于數(shù)組的長度;如果沒有傳遞索引,那么默認(rèn)情況下,索引將是 range(n),其中 n 代表數(shù)組長度。

示例 4:

import pandas as pd

data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}

df = pd.DataFrame(data)

print(df)

1234

輸出結(jié)果:

Age Name

0 28 Tom

1 34 Jack

2 29 Steve

3 42 Ricky

12345

注意:這里使用了默認(rèn)行標(biāo)簽,也就是 range(n)。它生成了 0,1,2,3,并分別對(duì)應(yīng)了列表中的每個(gè)元素值。

示例 5,現(xiàn)在給上述示例 4 添加自定義的行標(biāo)簽:

import pandas as pd

data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}

df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])

print(df)

1234

輸出結(jié)果如下:

Age Name

rank1 28 Tom

rank2 34 Jack

rank3 29 Steve

rank4 42 Ricky

12345

注意:index 參數(shù)為每行分配了一個(gè)索引。

4) 列表嵌套字典創(chuàng)建DataFrame對(duì)象

列表嵌套字典可以作為輸入數(shù)據(jù)傳遞給 DataFrame 構(gòu)造函數(shù)。默認(rèn)情況下,字典的鍵被用作列名。

示例 6 如下:

import pandas as pd

data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]

df = pd.DataFrame(data)

print(df)

1234

輸出結(jié)果:

a b c

0 1 2 NaN

1 5 10 20.0

123

注意:如果其中某個(gè)元素值缺失,也就是字典的 key 無法找到對(duì)應(yīng)的 value,將使用 NaN 代替。

示例 7,給上述示例 6 添加行標(biāo)簽索引:

import pandas as pd

data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]

df = pd.DataFrame(data, index=['first', 'second'])

print(df)

1234

輸出結(jié)果:

a b c

first 1 2 NaN

second 5 10 20.0

123

示例 8,如何使用字典嵌套列表以及行、列索引表創(chuàng)建一個(gè) DataFrame 對(duì)象。

import pandas as pd

data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]

df1 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b'])

df2 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b1'])

print(df1)

print(df2)

123456

輸出結(jié)果:

#df2輸出

a b

first 1 2

second 5 10

#df1輸出 a b1 first 1 NaN second 5 NaN

123456789

注意:因?yàn)?b1 在字典鍵中不存在,所以對(duì)應(yīng)值為 NaN。

5) Series創(chuàng)建DataFrame對(duì)象

您也可以傳遞一個(gè)字典形式的 Series,從而創(chuàng)建一個(gè) DataFrame 對(duì)象,其輸出結(jié)果的行索引是所有 index 的合集。 示例如下:

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),

'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)

print(df)

12345

輸出結(jié)果如下:

one two

a 1.0 1

b 2.0 2

c 3.0 3

d NaN 4

12345

注意:對(duì)于 one 列而言,此處雖然顯示了行索引 ‘d’,但由于沒有與其對(duì)應(yīng)的值,所以它的值為 NaN。

列索引操作DataFrame

DataFrame 可以使用列索(columns index)引來完成數(shù)據(jù)的選取、添加和刪除操作。下面依次對(duì)這些操作進(jìn)行介紹。

1) 列索引選取數(shù)據(jù)列

您可以使用列索引,輕松實(shí)現(xiàn)數(shù)據(jù)選取,示例如下:

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),

'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)

print(df ['one'])

12345

輸出結(jié)果:

a 1.0

b 2.0

c 3.0

d NaN

Name: one, dtype: float64

12345

2) 列索引添加數(shù)據(jù)列

使用 columns 列索引表標(biāo)簽可以實(shí)現(xiàn)添加新的數(shù)據(jù)列,示例如下:

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),

'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)

#使用df['列']=值,插入新的數(shù)據(jù)列

df['three']=pd.Series([10,20,30],index=['a','b','c'])

print(df)

#將已經(jīng)存在的數(shù)據(jù)列做相加運(yùn)算

df['four']=df['one']+df['three']

print(df)

12345678910

輸出結(jié)果:

使用列索引創(chuàng)建新數(shù)據(jù)列:

one two three

a 1.0 1 10.0

b 2.0 2 20.0

c 3.0 3 30.0

d NaN 4 NaN

已存在的數(shù)據(jù)列做算術(shù)運(yùn)算: one two three four a 1.0 1 10.0 11.0 b 2.0 2 20.0 22.0 c 3.0 3 30.0 33.0 d NaN 4 NaN NaN

12345678910111213

上述示例,我們初次使用了 DataFrame 的算術(shù)運(yùn)算,這和 NumPy 非常相似。除了使用df[]=value的方式外,您還可以使用 insert() 方法插入新的列,示例如下:

import pandas as pd

info=[['Jack',18],['Helen',19],['John',17]]

df=pd.DataFrame(info,columns=['name','age'])

print(df)

#注意是column參數(shù)

#數(shù)值1代表插入到columns列表的索引位置

df.insert(1,column='score',value=[91,90,75])

print(df)

12345678

輸出結(jié)果:

添加前:

name age

0 Jack 18

1 Helen 19

2 John 17

添加后: name score age 0 Jack 91 18 1 Helen 90 19 2 John 75 17

1234567891011

3) 列索引刪除數(shù)據(jù)列

通過 del 和 pop() 都能夠刪除 DataFrame 中的數(shù)據(jù)列。示例如下:

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),

'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']),

'three' : pd.Series([10,20,30], index=['a','b','c'])}

df = pd.DataFrame(d)

print ("Our dataframe is:")

print(df)

#使用del刪除

del df['one']

print(df)

#使用pop方法刪除

df.pop('two')

print (df)

12345678910111213

輸出結(jié)果:

原DataFrame:

one three two

a 1.0 10.0 1

b 2.0 20.0 2

c 3.0 30.0 3

d NaN NaN 4

使用del刪除 first: three two a 10.0 1 b 20.0 2 c 30.0 3 d NaN 4

使用 pop()刪除: three a 10.0 b 20.0 c 30.0 d NaN

1234567891011121314151617181920

行索引操作DataFrame

理解了上述的列索引操作后,行索引操作就變的簡單。下面看一下,如何使用行索引來選取 DataFrame 中的數(shù)據(jù)。

1) 標(biāo)簽索引選取

可以將行標(biāo)簽傳遞給 loc 函數(shù),來選取數(shù)據(jù)。示例如下:

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),

'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)

print(df.loc['b'])

12345

輸出結(jié)果:

one 2.0two 2.0Name: b, dtype: float64

1

注意:loc 允許接兩個(gè)參數(shù)分別是行和列,參數(shù)之間需要使用“逗號(hào)”隔開,但該函數(shù)只能接收標(biāo)簽索引。

2) 整數(shù)索引選取

通過將數(shù)據(jù)行所在的索引位置傳遞給 iloc 函數(shù),也可以實(shí)現(xiàn)數(shù)據(jù)行選取。示例如下:

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),

'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)

print (df.iloc[2])

12345

輸出結(jié)果:

one 3.0

two 3.0

Name: c, dtype: float64

123

注意:iloc 允許接受兩個(gè)參數(shù)分別是行和列,參數(shù)之間使用“逗號(hào)”隔開,但該函數(shù)只能接收整數(shù)索引。

3) 切片操作多行選取

您也可以使用切片的方式同時(shí)選取多行。示例如下:

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),

'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)

#左閉右開

print(df[2:4])

123456

輸出結(jié)果:

one two

c 3.0 3

d NaN 4

123

4) 添加數(shù)據(jù)行

使用 append() 函數(shù),可以將新的數(shù)據(jù)行添加到 DataFrame 中,該函數(shù)會(huì)在行末追加數(shù)據(jù)行。示例如下:

import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])

df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])

#在行末追加新數(shù)據(jù)行

df = df.append(df2)

print(df)

123456

輸出結(jié)果:

a b

0 1 2

1 3 4

0 5 6

1 7 8

12345

5) 刪除數(shù)據(jù)行

您可以使用行索引標(biāo)簽,從 DataFrame 中刪除某一行數(shù)據(jù)。如果索引標(biāo)簽存在重復(fù),那么它們將被一起刪除。示例如下:

import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])

df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])

df = df.append(df2)

print(df)

#注意此處調(diào)用了drop()方法

df = df.drop(0)

print (df)

12345678

輸出結(jié)果:

執(zhí)行drop(0)前:

a b

0 1 2

1 3 4

0 5 6

1 7 8

執(zhí)行drop(0)后: a b 1 3 4 1 7 8

1234567891011

在上述的示例中,默認(rèn)使用 range(2) 生成了行索引,并通過 drop(0) 同時(shí)刪除了兩行數(shù)據(jù)。

常用屬性和方法匯總

DataFrame 的屬性和方法,與 Series 相差無幾,如下所示:

名稱屬性&方法描述T行和列轉(zhuǎn)置。axes返回一個(gè)僅以行軸標(biāo)簽和列軸標(biāo)簽為成員的列表。dtypes返回每列數(shù)據(jù)的數(shù)據(jù)類型。emptyDataFrame中沒有數(shù)據(jù)或者任意坐標(biāo)軸的長度為0,則返回True。ndim軸的數(shù)量,也指數(shù)組的維數(shù)。shape返回一個(gè)元組,表示了 DataFrame 維度。sizeDataFrame中的元素?cái)?shù)量。values使用 numpy 數(shù)組表示 DataFrame 中的元素值。head()返回前 n 行數(shù)據(jù)。tail()返回后 n 行數(shù)據(jù)。shift()將行或列移動(dòng)指定的步幅長度

下面對(duì) DataFrame 常用屬性進(jìn)行演示,首先我們創(chuàng)建一個(gè) DataFrame 對(duì)象,示例如下:

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['c語言中文網(wǎng)','編程幫',"百度",'360搜索','谷歌','微學(xué)苑','Bing搜索']),

'years':pd.Series([5,6,15,28,3,19,23]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#構(gòu)建DataFrame

df = pd.DataFrame(d)

#輸出series

print(df)

123456789

輸出結(jié)果:

輸出 series 數(shù)據(jù):

Name years Rating

0 c語言中文網(wǎng) 5 4.23

1 編程幫 6 3.24

2 百度 15 3.98

3 360搜索 28 2.56

4 谷歌 3 3.20

5 微學(xué)苑 19 4.60

6 Bing搜索 23 3.80

123456789

1) T(Transpose)轉(zhuǎn)置

返回 DataFrame 的轉(zhuǎn)置,也就是把行和列進(jìn)行交換。

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['c語言中文網(wǎng)','編程幫',"百度",'360搜索','谷歌','微學(xué)苑','Bing搜索']),

'years':pd.Series([5,6,15,28,3,19,23]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#構(gòu)建DataFrame

df = pd.DataFrame(d)

#輸出DataFrame的轉(zhuǎn)置

print(df.T)

123456789

輸出結(jié)果:

Our data series is:

0 1 2 3 4 5 6

Name c語言中文網(wǎng) 編程幫 百度 360搜索 谷歌 微學(xué)苑 Bing搜索

years 5 6 15 28 3 19 23

Rating 4.23 3.24 3.98 2.56 3.2 4.6 3.8

12345

2) axes

返回一個(gè)行標(biāo)簽、列標(biāo)簽組成的列表。

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['c語言中文網(wǎng)','編程幫',"百度",'360搜索','谷歌','微學(xué)苑','Bing搜索']),

'years':pd.Series([5,6,15,28,3,19,23]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#構(gòu)建DataFrame

df = pd.DataFrame(d)

#輸出行、列標(biāo)簽

print(df.axes)

123456789

輸出結(jié)果:

[RangeIndex(start=0, stop=7, step=1), Index(['Name', 'years', 'Rating'], dtype='object')]

1

3) dtypes

返回每一列的數(shù)據(jù)類型。示例如下:

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['c語言中文網(wǎng)','編程幫',"百度",'360搜索','谷歌','微學(xué)苑','Bing搜索']),

'years':pd.Series([5,6,15,28,3,19,23]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#構(gòu)建DataFrame

df = pd.DataFrame(d)

#輸出行、列標(biāo)簽

print(df.dtypes)

123456789

輸出結(jié)果:

Name object

years int64

Rating float64

dtype: object

1234

4) empty

返回一個(gè)布爾值,判斷輸出的數(shù)據(jù)對(duì)象是否為空,若為 True 表示對(duì)象為空。

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['c語言中文網(wǎng)','編程幫',"百度",'360搜索','谷歌','微學(xué)苑','Bing搜索']),

'years':pd.Series([5,6,15,28,3,19,23]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#構(gòu)建DataFrame

df = pd.DataFrame(d)

#判斷輸入數(shù)據(jù)是否為空

print(df.empty)

123456789

輸出結(jié)果:

判斷輸入對(duì)象是否為空:

False

12

5) ndim

返回?cái)?shù)據(jù)對(duì)象的維數(shù)。DataFrame 是一個(gè)二維數(shù)據(jù)結(jié)構(gòu)。

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['c語言中文網(wǎng)','編程幫',"百度",'360搜索','谷歌','微學(xué)苑','Bing搜索']),

'years':pd.Series([5,6,15,28,3,19,23]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#構(gòu)建DataFrame

df = pd.DataFrame(d)

#DataFrame的維度

print(df.ndim)

123456789

輸出結(jié)果:

2

6) shape

返回一個(gè)代表 DataFrame 維度的元組。返回值元組 (a,b),其中 a 表示行數(shù),b 表示列數(shù)。

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['c語言中文網(wǎng)','編程幫',"百度",'360搜索','谷歌','微學(xué)苑','Bing搜索']),

'years':pd.Series([5,6,15,28,3,19,23]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#構(gòu)建DataFrame

df = pd.DataFrame(d)

#DataFrame的形狀

print(df.shape)

輸出結(jié)果:

12345678910

(7, 3)

7) size

返回 DataFrame 中的元素?cái)?shù)量。示例如下:

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['c語言中文網(wǎng)','編程幫',"百度",'360搜索','谷歌','微學(xué)苑','Bing搜索']),

'years':pd.Series([5,6,15,28,3,19,23]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#構(gòu)建DataFrame

df = pd.DataFrame(d)

#DataFrame的中元素個(gè)數(shù)

print(df.size)

123456789

輸出結(jié)果:

21

8) values

以 ndarray 數(shù)組的形式返回 DataFrame 中的數(shù)據(jù)。

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['c語言中文網(wǎng)','編程幫',"百度",'360搜索','谷歌','微學(xué)苑','Bing搜索']),

'years':pd.Series([5,6,15,28,3,19,23]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#構(gòu)建DataFrame

df = pd.DataFrame(d)

#DataFrame的數(shù)據(jù)

print(df.values)

123456789

輸出結(jié)果:

[['c語言中文網(wǎng)' 5 4.23]

['編程幫' 6 3.24]

['百度' 15 3.98]

['360搜索' 28 2.56]

['谷歌' 3 3.2]

['微學(xué)苑' 19 4.6]

['Bing搜索' 23 3.8]]

1234567

9) head()&tail()查看數(shù)據(jù)

如果想要查看 DataFrame 的一部分?jǐn)?shù)據(jù),可以使用 head() 或者 tail() 方法。其中 head() 返回前 n 行數(shù)據(jù),默認(rèn)顯示前 5 行數(shù)據(jù)。示例如下:

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['c語言中文網(wǎng)','編程幫',"百度",'360搜索','谷歌','微學(xué)苑','Bing搜索']),

'years':pd.Series([5,6,15,28,3,19,23]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#構(gòu)建DataFrame

df = pd.DataFrame(d)

#獲取前3行數(shù)據(jù)

print(df.head(3))

123456789

輸出結(jié)果:

Name years Rating

0 c語言中文網(wǎng) 5 4.23

1 編程幫 6 3.24

2 百度 15 3.98

1234

tail() 返回后 n 行數(shù)據(jù),示例如下:

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['c語言中文網(wǎng)','編程幫',"百度",'360搜索','谷歌','微學(xué)苑','Bing搜索']),

'years':pd.Series([5,6,15,28,3,19,23]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#構(gòu)建DataFrame

df = pd.DataFrame(d)

#獲取后2行數(shù)據(jù)

print(df.tail(2))

123456789

輸出結(jié)果:

Name years Rating

5 微學(xué)苑 19 4.6

6 Bing搜索 23 3.8

123

10) shift()移動(dòng)行或列

如果您想要移動(dòng) DataFrame 中的某一行/列,可以使用 shift() 函數(shù)實(shí)現(xiàn)。它提供了一個(gè)periods參數(shù),該參數(shù)表示在特定的軸上移動(dòng)指定的步幅。

shif() 函數(shù)的語法格式如下:

DataFrame.shift(periods=1, freq=None, axis=0)

參數(shù)說明如下:

參數(shù)名稱說明peroids類型為int,表示移動(dòng)的幅度,可以是正數(shù),也可以是負(fù)數(shù),默認(rèn)值為1。freq日期偏移量,默認(rèn)值為None,適用于時(shí)間序。取值為符合時(shí)間規(guī)則的字符串。axis如果是 0 或者 “index” 表示上下移動(dòng),如果是 1 或者 “columns” 則會(huì)左右移動(dòng)。fill_value該參數(shù)用來填充缺失值。

該函數(shù)的返回值是移動(dòng)后的 DataFrame 副本。下面看一組簡單的實(shí)例:

import pandas as pd

info= pd.DataFrame({'a_data': [40, 28, 39, 32, 18],

'b_data': [20, 37, 41, 35, 45],

'c_data': [22, 17, 11, 25, 15]})

#移動(dòng)幅度為3

info.shift(periods=3)

123456

輸出結(jié)果:

a_data b_data c_data

0 NaN NaN NaN

1 NaN NaN NaN

2 NaN NaN NaN

3 40.0 20.0 22.0

4 28.0 37.0 17.0

123456

下面使用 fill_value 參數(shù)填充 DataFrame 中的缺失值,如下所示:

import pandas as pd

info= pd.DataFrame({'a_data': [40, 28, 39, 32, 18],

'b_data': [20, 37, 41, 35, 45],

'c_data': [22, 17, 11, 25, 15]})

#移動(dòng)幅度為3

print(info.shift(periods=3))

#將缺失值和原數(shù)值替換為52

info.shift(periods=3,axis=1,fill_value= 52)

12345678

輸出結(jié)果:

原輸出結(jié)果:

a_data b_data c_data

0 NaN NaN NaN

1 NaN NaN NaN

2 NaN NaN NaN

3 40.0 20.0 22.0

4 28.0 37.0 17.0

替換后輸出: a_data b_data c_data 0 52 52 52 1 52 52 52 2 52 52 52 3 52 52 52 4 52 52 52

123456789101112131415

注意:fill_value 參數(shù)不僅可以填充缺失值,還也可以對(duì)原數(shù)據(jù)進(jìn)行替換。

Pandas Panel三維數(shù)據(jù)結(jié)構(gòu)

Panel 結(jié)構(gòu)也稱“面板結(jié)構(gòu)”,它源自于 Panel Data 一詞,翻譯為“面板數(shù)據(jù)”。如果您使用的是 Pandas 0.25 以前的版本,那么您需要掌握本節(jié)內(nèi)容,否則,作為了解內(nèi)容即可。

自 Pandas 0.25 版本后, Panel 結(jié)構(gòu)已經(jīng)被廢棄。

Panel 是一個(gè)用來承載數(shù)據(jù)的三維數(shù)據(jù)結(jié)構(gòu),它有三個(gè)軸,分別是 items(0 軸),major_axis(1 軸),而 minor_axis(2 軸)。這三個(gè)軸為描述、操作 Panel 提供了支持,其作用介紹如下:

items:axis =0,Panel 中的每個(gè) items 都對(duì)應(yīng)一個(gè) DataFrame。major_axis:axis=1,用來描述每個(gè) DataFrame 的行索引。minor_axis:axis=2,用來描述每個(gè) DataFrame 的列索引。

pandas.Panel()

您可以使用下列構(gòu)造函數(shù)創(chuàng)建一個(gè) Panel,如下所示:

pandas.Panel(data, items, major_axis, minor_axis, dtype, copy)

參數(shù)說明如下:

參數(shù)名稱描述說明data輸入數(shù)據(jù),可以是 ndarray,Series,列表,字典,或者 DataFrame。itemsaxis=0major_axisaxis=1minor_axisaxis=2dtype每一列的數(shù)據(jù)類型。copy默認(rèn)為 False,表示是否復(fù)制數(shù)據(jù)。

創(chuàng)建Panel 對(duì)象

下面介紹創(chuàng)建 Panel 對(duì)象的兩種方式:一種是使用 nadarry 數(shù)組創(chuàng)建,另一種使用 DataFrame 對(duì)象創(chuàng)建。首先,我們學(xué)習(xí)如何創(chuàng)建一個(gè)空的 Panel 對(duì)象。

1) 創(chuàng)建一個(gè)空Panel

使用 Panel 的構(gòu)造函數(shù)創(chuàng)建,如下所示:

import pandas as pd

p = pd.Panel()

print(p)

123

輸出結(jié)果:

Dimensions: 0 (items) x 0 (major_axis) x 0 (minor_axis)

Items axis: None

Major_axis axis: None

Minor_axis axis: None

12345

2) ndarray三維數(shù)組創(chuàng)建

import pandas as pd

import numpy as np

#返回均勻分布的隨機(jī)樣本值位于[0,1)之間

data = np.random.rand(2,4,5)

p = pd.Panel(data)

print (p)

123456

輸出結(jié)果:

Dimensions: 2 (items) x 4 (major_axis) x 5 (minor_axis)

Items axis: 0 to 1

Major_axis axis: 0 to 3

Minor_axis axis: 0 to 4

12345

請(qǐng)注意與上述示例的空 Panel 進(jìn)行對(duì)比。

3) DataFrame創(chuàng)建

下面使用 DataFrame 創(chuàng)建一個(gè) Panel,示例如下:

import pandas as pd

import numpy as np

data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)),

'Item2' : pd.DataFrame(np.random.randn(4, 2))}

p = pd.Panel(data)

print(p)

123456

輸出結(jié)果:

Dimensions: 2 (items) x 4 (major_axis) x 3 (minor_axis)

Items axis: Item1 to Item2

Major_axis axis: 0 to 3

Minor_axis axis: 0 to 2

1234

Panel中選取數(shù)據(jù)

如果想要從 Panel 對(duì)象中選取數(shù)據(jù),可以使用 Panel 的三個(gè)軸來實(shí)現(xiàn),也就是items,major_axis,minor_axis。下面介紹其中一種,大家體驗(yàn)一下即可。

1) 使用 items選取數(shù)據(jù)

示例如下:

import pandas as pd

import numpy as np

data = {'Item1':pd.DataFrame(np.random.randn(4, 3)),

'Item2':pd.DataFrame(np.random.randn(4, 2))}

p = pd.Panel(data)

print(p['Item1'])

123456

輸出結(jié)果:

0 1 2

0 0.488224 -0.128637 0.930817

1 0.417497 0.896681 0.576657

2 -2.775266 0.571668 0.290082

3 -0.400538 -0.144234 1.110535

12345

上述示例中 data,包含了兩個(gè)數(shù)據(jù)項(xiàng),我們選擇了 item1,輸出結(jié)果是 4 行 3 列的 DataFrame,其行、列索引分別對(duì)應(yīng) major_axis 和 minor_axis。

Python Pandas描述性統(tǒng)計(jì)

描述統(tǒng)計(jì)學(xué)(descriptive statistics)是一門統(tǒng)計(jì)學(xué)領(lǐng)域的學(xué)科,主要研究如何取得反映客觀現(xiàn)象的數(shù)據(jù),并以圖表形式對(duì)所搜集的數(shù)據(jù)進(jìn)行處理和顯示,最終對(duì)數(shù)據(jù)的規(guī)律、特征做出綜合性的描述分析。Pandas 庫正是對(duì)描述統(tǒng)計(jì)學(xué)知識(shí)完美應(yīng)用的體現(xiàn),可以說如果沒有“描述統(tǒng)計(jì)學(xué)”作為理論基奠,那么 Pandas 是否存在猶未可知。下列表格對(duì) Pandas 常用的統(tǒng)計(jì)學(xué)函數(shù)做了簡單的總結(jié):

函數(shù)名稱描述說明count()統(tǒng)計(jì)某個(gè)非空值的數(shù)量。sum()求和mean()求均值median()求中位數(shù)mode()求眾數(shù)std()求標(biāo)準(zhǔn)差min()求最小值max()求最大值abs()求絕對(duì)值prod()求所有數(shù)值的乘積。cumsum()計(jì)算累計(jì)和,axis=0,按照行累加;axis=1,按照列累加。cumprod()計(jì)算累計(jì)積,axis=0,按照行累積;axis=1,按照列累積。corr()計(jì)算數(shù)列或變量之間的相關(guān)系數(shù),取值-1到1,值越大表示關(guān)聯(lián)性越強(qiáng)。

從描述統(tǒng)計(jì)學(xué)角度出發(fā),我們可以對(duì) DataFrame 結(jié)構(gòu)執(zhí)行聚合計(jì)算等其他操作,比如 sum() 求和、mean()求均值等方法。

在 DataFrame 中,使用聚合類方法時(shí)需要指定軸(axis)參數(shù)。下面介紹兩種傳參方式:

對(duì)行操作,默認(rèn)使用 axis=0 或者使用 “index”;對(duì)列操作,默認(rèn)使用 axis=1 或者使用 “columns”。

圖1:axis軸示意圖

從圖 1 可以看出,axis=0 表示按垂直方向進(jìn)行計(jì)算,而 axis=1 則表示按水平方向。下面讓我們創(chuàng)建一個(gè) DataFrame,使用它對(duì)本節(jié)的內(nèi)容進(jìn)行演示。

創(chuàng)建一個(gè) DataFrame 結(jié)構(gòu),如下所示:

import pandas as pd

import numpy as np

#創(chuàng)建字典型series結(jié)構(gòu)

d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',

'老李','老王','小馮','小何','老張']),

'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])

}

df = pd.DataFrame(d)

print(df)

12345678910

輸出結(jié)果:

Name Age Rating

0 小明 25 4.23

1 小亮 26 3.24

2 小紅 25 3.98

3 小華 23 2.56

4 老趙 30 3.20

5 小曹 29 4.60

6 小陳 23 3.80

7 老李 34 3.78

8 老王 40 2.98

9 小馮 30 4.80

10 小何 51 4.10

11 老張 46 3.65

12345678910111213

sum()求和

在默認(rèn)情況下,返回 axis=0 的所有值的和。示例如下:

import pandas as pd

import numpy as np

#創(chuàng)建字典型series結(jié)構(gòu)

d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',

'老李','老王','小馮','小何','老張']),

'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])

}

df = pd.DataFrame(d)

#默認(rèn)axis=0或者使用sum("index")

print(df.sum())

1234567891011

輸出結(jié)果:

Name 小明小亮小紅小華老趙小曹小陳老李老王小馮小何老張

Age 382

Rating 44.92

dtype: object

1234

注意:sum() 和 cumsum() 函數(shù)可以同時(shí)處理數(shù)字和字符串?dāng)?shù)據(jù)。雖然字符聚合通常不被使用,但使用這兩個(gè)函數(shù)并不會(huì)拋出異常;而對(duì)于 abs()、cumprod() 函數(shù)則會(huì)拋出異常,因?yàn)樗鼈儫o法操作字符串?dāng)?shù)據(jù)。

下面再看一下 axis=1 的情況,如下所示:

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',

'老李','老王','小馮','小何','老張']),

'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])

}

df = pd.DataFrame(d)

#也可使用sum("columns")或sum(1)

print(df.sum(axis=1))

12345678910

輸出結(jié)果:

0 29.23

1 29.24

2 28.98

3 25.56

4 33.20

5 33.60

6 26.80

7 37.78

8 42.98

9 34.80

10 55.10

11 49.65

dtype: float64

12345678910111213

mean()求均值

示例如下:

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',

'老李','老王','小馮','小何','老張']),

'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])

}

df = pd.DataFrame(d)

print(df.mean())

123456789

輸出結(jié)果:

Age 31.833333

Rating 3.743333

dtype: float64

123

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

返回?cái)?shù)值列的標(biāo)準(zhǔn)差,示例如下:

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',

'老李','老王','小馮','小何','老張']),

'Age':pd.Series([25,26,25,23,59,19,23,44,40,30,51,54]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])

}

df = pd.DataFrame(d)

print(df.std())

123456789

輸出結(jié)果:

Age 13.976983

Rating 0.661628

dtype: float64

123

標(biāo)準(zhǔn)差是方差的算術(shù)平方根,它能反映一個(gè)數(shù)據(jù)集的離散程度。注意,平均數(shù)相同的兩組數(shù)據(jù),標(biāo)準(zhǔn)差未必相同。

數(shù)據(jù)匯總描述

describe() 函數(shù)顯示與 DataFrame 數(shù)據(jù)列相關(guān)的統(tǒng)計(jì)信息摘要。示例如下:

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',

'老李','老王','小馮','小何','老張']),

'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])

}

#創(chuàng)建DataFrame對(duì)象

df = pd.DataFrame(d)

#求出數(shù)據(jù)的所有描述信息

print(df.describe())

1234567891011

輸出結(jié)果:

Age Rating

count 12.000000 12.000000

mean 34.916667 3.743333

std 13.976983 0.661628

min 19.000000 2.560000

25% 24.500000 3.230000

50% 28.000000 3.790000

75% 45.750000 4.132500

max 59.000000 4.800000

123456789

describe() 函數(shù)輸出了平均值、std 和 IQR 值(四分位距)等一系列統(tǒng)計(jì)信息。通過 describe() 提供的include能夠篩選字符列或者數(shù)字列的摘要信息。

include 相關(guān)參數(shù)值說明如下:

object: 表示對(duì)字符列進(jìn)行統(tǒng)計(jì)信息描述;number:表示對(duì)數(shù)字列進(jìn)行統(tǒng)計(jì)信息描述;all:匯總所有列的統(tǒng)計(jì)信息。

下面看一組示例,如下所示:

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',

'老李','老王','小馮','小何','老張']),

'Age':pd.Series([25,26,25,23,59,19,23,44,40,30,51,54]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])

}

df = pd.DataFrame(d)

print(df.describe(include=["object"]))

123456789

輸出結(jié)果:

Name

count 12

unique 12

top 小紅

freq 1

12345

最后使用all參數(shù),看一下輸出結(jié)果,如下所示:

import pandas as pd

import numpy as np

d = {'Name':pd.Series(['小明','小亮','小紅','小華','老趙','小曹','小陳',

'老李','老王','小馮','小何','老張']),

'Age':pd.Series([25,26,25,23,

柚子快報(bào)邀請(qǐng)碼778899分享:Pandas用法詳解

http://yzkb.51969.com/

文章鏈接

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18001335.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄