国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

NumPy 和 Pandas 數(shù)據(jù)分析實(shí)用指南:1~6 全

這篇具有很好參考價(jià)值的文章主要介紹了NumPy 和 Pandas 數(shù)據(jù)分析實(shí)用指南:1~6 全。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

原文:Hands-On Data Analysis with NumPy and pandas

協(xié)議:CC BY-NC-SA 4.0

譯者:飛龍

一、配置 Python 數(shù)據(jù)分析環(huán)境

在本章中,我們將介紹以下主題:

  • 安裝 Anaconda
  • 探索 Jupyter 筆記本
  • 探索 Jupyter 的替代品
  • 管理 Anaconda 包
  • 配置數(shù)據(jù)庫(kù)

在本章中,我們將討論如何安裝和管理 Anaconda。 Anaconda 是一個(gè)包,我們將在本書的以下各章中使用。

什么是 Anaconda?

在本節(jié)中,我們將討論什么是 Anaconda 以及為什么使用它。 我們將提供一個(gè)鏈接,以顯示從其贊助商 Continuum Analytics 的網(wǎng)站下載 Anaconda 的位置,并討論如何安裝 Anaconda。 Anaconda 是 Python 和 R 編程語(yǔ)言的開源發(fā)行版。

在本書中,我們將專注于 Anaconda 專門用于 Python 的部分。 Anaconda 幫助我們將這些語(yǔ)言用于數(shù)據(jù)分析應(yīng)用,包括大規(guī)模數(shù)據(jù)處理,預(yù)測(cè)分析以及科學(xué)和統(tǒng)計(jì)計(jì)算。 Continuum Analytics 為 Anaconda 提供企業(yè)支持,包括可幫助團(tuán)隊(duì)協(xié)作并提高其系統(tǒng)性能的版本,并提供一種部署使用 Anaconda 開發(fā)的模型的方法。 因此,Anaconda 出現(xiàn)在企業(yè)環(huán)境中,有抱負(fù)的分析師應(yīng)該熟悉它的用法。 Anaconda 附帶了本書中使用的許多包,包括 Jupyter,NumPy,pandas 以及其他許多數(shù)據(jù)分析中常用的包。 僅此一項(xiàng)就可以解釋其受歡迎程度。

Anaconda 的安裝包括現(xiàn)成的數(shù)據(jù)分析所需的大部分內(nèi)容。 Conda 包管理器還可用于下載和安裝新包。

為什么要使用 Anaconda? Anaconda 專門為數(shù)據(jù)分析打包了 Python。 Anaconda 安裝中包含了您項(xiàng)目中最重要的包。 除了 Anaconda 提供的一些性能提升,和 Continuum Analytics 對(duì)該包的企業(yè)支持之外,對(duì)于它的流行也不應(yīng)感到驚訝。

安裝 Anaconda

您可以從 Continuum Analytics 網(wǎng)站免費(fèi)下載 Anaconda。 下載主頁(yè)面在這里; 否則,很容易找到。 確保選擇適合您系統(tǒng)的安裝程序。 顯然,選擇適合您的操作系統(tǒng)的安裝程序,但也要注意 Anaconda 具有 32 位和 64 位版本。 64 位版本為 64 位系統(tǒng)提供最佳性能。

Python 社區(qū)正處于從 Python 2.7 到 Python 3.6 的緩慢過渡中,這不是完全向后兼容的。 如果您需要使用 Python 2.7,可能是由于遺留代碼或尚未更新為與 Python 3.6 兼容的包,請(qǐng)選擇 Anaconda 的 Python 2.7 版本。 否則,我們將使用 Python 3.6。

以下屏幕截圖來(lái)自 Anaconda 網(wǎng)站,分析人員可從該網(wǎng)站下載 Anaconda:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-caS2nj30-1681367023138)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/afb01afe-769c-4084-8aa3-98d8a13b528f.png)]

Anaconda website

如您所見,我們可以選擇適用于操作系統(tǒng)(包括 Windows,macOS 和 Linux),處理器和 Python 版本的 Anaconda 安裝。 導(dǎo)航到正確的操作系統(tǒng)和處理器,然后在 Python 2.7 和 Python 3.6 之間進(jìn)行選擇。

在這里,我們將使用 Python 3.6。 在 Windows 和 macOS 上進(jìn)行安裝最終等同于使用安裝向?qū)?,該安裝向?qū)ǔ?huì)為您的系統(tǒng)選擇最佳選項(xiàng),盡管它確實(shí)允許某些選項(xiàng)根據(jù)您的首選項(xiàng)而有所不同。

Linux 安裝必須通過命令行完成,但是對(duì)于那些熟悉 Linux 安裝的人來(lái)說(shuō),它應(yīng)該不會(huì)太復(fù)雜。 最終,這相當(dāng)于運(yùn)行 Bash 腳本。 在本書中,我們將使用 Windows。

探索 Jupyter 筆記本

在本節(jié)中,我們將探索 Jupyter 筆記本,這是我們將使用 Python 進(jìn)行數(shù)據(jù)分析的主要工具。 我們將看到什么是 Jupyter 筆記本,還將討論 Markdown,這是我們?cè)?Jupyter 筆記本中用于創(chuàng)建格式化文本的工具。 在 Jupyter 筆記本中,有兩種類型的塊。 有一些可執(zhí)行的 Python 代碼塊,然后是帶格式的,人類可讀的文本塊。

用戶執(zhí)行 Python 代碼塊,然后將結(jié)果直接插入文檔中。 除非以同樣的方式運(yùn)行,否則代碼塊可以以任何順序重新運(yùn)行,而不必影響以后的塊。 由于 Jupyter 筆記本基于 IPython,因此有一些附加功能,例如魔術(shù)命令。

Anaconda 隨附 Jupyter 筆記本。 Jupyter 筆記本允許純文本與代碼混合。 可以使用稱為 Markdown 的語(yǔ)言格式化純文本。 它以純文本格式完成。 我們也可以插入段落。 以下示例是您在 Markdown 中看到的一些常見語(yǔ)法:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-W10DzIIk-1681367023139)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/91c48200-98ac-44dd-9708-3497a787c687.png)]

以下屏幕截圖顯示了 Jupyter 筆記本:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-atwwqUD5-1681367023139)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/569e8dbc-0948-41f4-a911-f06b533ed491.png)]

如您所見,它用盡了網(wǎng)絡(luò)瀏覽器,例如 Chrome 或 Firefox,在這種情況下為 Chrome。 當(dāng)我們開始 Jupyter 筆記本時(shí),我們?cè)谖募g覽器中。 我們?cè)谝粋€(gè)新創(chuàng)建的目錄Untitled Folder中。 在 Jupyter 筆記本中,有用于創(chuàng)建新筆記本,文本文件和文件夾的選項(xiàng)。 如前面的屏幕截圖所示,當(dāng)前沒有保存筆記本。 我們將需要一個(gè) Python 筆記本,可以通過在以下屏幕快照中顯示的“新建”下拉菜單中選擇 Python 選項(xiàng)來(lái)創(chuàng)建它。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-p33vW2Cw-1681367023140)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c622867b-9917-4cf6-8873-652cb09681be.png)]

筆記本啟動(dòng)后,我們從一個(gè)代碼塊開始。 我們可以將此代碼塊更改為 Markdown 塊,現(xiàn)在可以開始輸入文本了。

例如,我們可以輸入標(biāo)題。 我們還可以輸入純文本以及粗體和斜體,如下面的屏幕快照所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-TDBcd82q-1681367023140)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/a0e37ac9-6c29-41a6-800a-d54997940fa6.png)]

如您所見,在渲染結(jié)束時(shí)會(huì)有一些提示,但是實(shí)際上我們可以通過單擊運(yùn)行單元按鈕來(lái)查看渲染。 如果要更改此設(shè)置,可以雙擊同一單元格。 現(xiàn)在我們回到純文本編輯。 在這里我們添加單型,然后再次單擊運(yùn)行單元,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-m9yzKGK2-1681367023141)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4e012685-36bb-4577-a304-52fc784de693.png)]

在按下Enter時(shí),隨后將立即創(chuàng)建一個(gè)新單元格。 該單元格是一個(gè) Python 單元格,我們可以在其中輸入 Python 代碼。 例如,我們可以創(chuàng)建一個(gè)變量。 我們多次打印Hello, world!,如以下屏幕截圖所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-MJ7BVP1X-1681367023141)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/949ce51b-9437-41be-9dba-83546b92383d.png)]

要查看執(zhí)行單元時(shí)會(huì)發(fā)生什么,我們只需單擊運(yùn)行單元; 同樣,當(dāng)我們按Enter時(shí),將創(chuàng)建一個(gè)新的單元塊。 讓我們將此單元格塊標(biāo)記為 Markdown 塊。 如果要插入其他單元格,可以按下面的插入單元格。 在第一個(gè)單元格中,我們將輸入一些代碼,在第二個(gè)單元格中,我們可以輸入依賴于第一個(gè)單元格中的代碼的代碼。 注意當(dāng)我們嘗試在第一個(gè)單元格中執(zhí)行代碼之前在第二個(gè)單元格中執(zhí)行代碼時(shí)會(huì)發(fā)生什么。 將產(chǎn)生一個(gè)錯(cuò)誤,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-jqbAfKxG-1681367023141)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/6aafed53-74eb-4362-b24f-4ad744e05df5.png)]

投訴變量trigger尚未定義。 為了使第二個(gè)單元正常工作,我們需要運(yùn)行第一個(gè)單元。 然后,當(dāng)我們運(yùn)行第二個(gè)單元格時(shí),我們將獲得預(yù)期的輸出。 現(xiàn)在假設(shè)我們要更改此單元格中的代碼。 比方說(shuō),我們有trigger = True而不是trigger = False。 第二個(gè)單元將不知道該更改。 如果再次運(yùn)行此單元格,則會(huì)得到相同的輸出。 因此,我們將需要首先運(yùn)行此單元格,從而影響更改。 然后我們可以運(yùn)行第二個(gè)單元并獲得預(yù)期的輸出。

后臺(tái)發(fā)生了什么? 發(fā)生的事情是有一個(gè)內(nèi)核,它基本上是一個(gè)正在運(yùn)行的 Python 會(huì)話,它跟蹤我們所有的變量以及到目前為止發(fā)生的所有事情。 如果單擊內(nèi)核,則可以看到重新啟動(dòng)內(nèi)核的選項(xiàng)。 這將基本上重新啟動(dòng)我們的 Python 會(huì)話。 我們最初警告說(shuō),通過重新啟動(dòng)內(nèi)核,所有變量都將丟失。

重新啟動(dòng)內(nèi)核后,似乎沒有任何更改,但是如果我們運(yùn)行第二個(gè)單元,則將產(chǎn)生錯(cuò)誤,因?yàn)樽兞?code>trigger不存在。 我們將需要首先運(yùn)行上一個(gè)單元,以便該單元正常工作。 相反,如果我們不僅要重啟內(nèi)核,還要重啟內(nèi)核并重新運(yùn)行所有單元,則需要單擊“重啟并運(yùn)行全部”。 重新啟動(dòng)內(nèi)核后,將重新運(yùn)行所有單元塊。 它可能看起來(lái)好像沒有發(fā)生任何事情,但是我們已經(jīng)從第一個(gè)開始,運(yùn)行它,運(yùn)行第二個(gè)單元格,然后運(yùn)行第三個(gè)單元格,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-OQHxPkEU-1681367023142)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/2565c2e6-345d-4b1e-a1c2-7d3f5c795ea6.png)]

我們也可以導(dǎo)入庫(kù)。 例如,我們可以從 Matplotlib 導(dǎo)入模塊。 在這種情況下,為了使 Matplotlib 在 Jupyter 筆記本中交互工作,我們將需要使用魔術(shù)命令,該魔術(shù)命令以%開頭,魔術(shù)命令的名稱以及需要傳遞給的任何類型的參數(shù)。 它。 稍后,我們將在詳細(xì)信息中介紹這些內(nèi)容,但首先讓我們運(yùn)行該單元格。plt現(xiàn)在已經(jīng)加載,現(xiàn)在我們可以使用它了。 例如,在最后一個(gè)單元格中,我們將輸入以下代碼:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-n9T3vIrc-1681367023142)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/cd197191-9798-46d6-9448-bed5424046a6.png)]

請(qǐng)注意,此單元格的輸出直接插入到文檔中。 我們可以立即看到創(chuàng)建的圖。 回到魔術(shù)命令,這不是我們唯一可用的命令。 讓我們看看其他命令:

  • 魔術(shù)命令magic將打印有關(guān)魔術(shù)系統(tǒng)的信息,如以下屏幕截圖所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PSkfVGvF-1681367023142)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/0f3e2361-f268-4a4c-906f-a07c8abfb37e.png)]

魔術(shù)命令的輸出

  • 另一個(gè)有用的命令是timeit,我們可以使用它來(lái)分析代碼。 我們首先輸入timeit,然后輸入我們希望分析的代碼,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-DElcfvpL-1681367023143)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/7568717e-d006-4017-9604-acd103872739.png)]

  • 魔術(shù)命令pwd可用于查看工作目錄是什么,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-f3nzHiDc-1681367023143)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/40e2e58c-e439-408c-9599-ecddba61f8b8.png)]

  • 魔術(shù)命令cd可用于更改工作目錄,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-x6da9WtG-1681367023143)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/17797748-fa2f-487f-b02c-d0059a261bf1.png)]

  • 如果我們希望以交互模式啟動(dòng) Matplotlib 和 NumPy,魔術(shù)命令pylab很有用,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-SOm8hWxn-1681367023144)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4c06dc29-3b70-487d-9d98-7e13353944c9.png)]

如果希望查看可用魔術(shù)命令的列表,可以鍵入lsmagic,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-klhe2fv9-1681367023144)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/e34823c6-6be8-4696-bc06-5e54f9cff9d1.png)]

如果需要快速參考表,可以使用魔術(shù)命令quickref,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-KfHw4HMC-1681367023145)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/29c90042-1537-4075-88dd-edec313c9025.png)]

現(xiàn)在,我們已經(jīng)完成了此筆記本的工作,讓我們?yōu)槠涿?我們簡(jiǎn)單地稱它為My Notebook。 通過單擊編輯器窗格頂部的筆記本名稱來(lái)完成此操作。 最后,您可以保存,并且保存后可以關(guān)閉和停止筆記本電腦。 因此,這將關(guān)閉筆記本并停止筆記本的內(nèi)核。 那是離開筆記本電腦的干凈方法。 現(xiàn)在注意,在我們的樹中,我們可以看到保存筆記本的目錄,并且可以看到該目錄中存在筆記本。 它是ipynb文件。

探索 Jupyter 的替代品

現(xiàn)在,我們將考慮替代 Jupyter 筆記本。 我們將看:

  • Jupyter QT 控制臺(tái)
  • Spider
  • Rodeo
  • Python 解釋器
  • ptpython

我們將考慮的第一個(gè)替代方案是 Jupyter QT 控制臺(tái)。 這是一個(gè)具有附加功能的 Python 解釋器,專門用于數(shù)據(jù)分析。

以下屏幕截圖顯示了 Jupyter QT 控制臺(tái):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-J1WZmLY2-1681367023145)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/43fea253-2b02-483a-8fac-781c98e575b9.png)]

它與 Jupyter 筆記本非常相似。 實(shí)際上,它實(shí)際上是 Jupyter 筆記本的控制臺(tái)版本。 注意這里我們有一些有趣的語(yǔ)法。 我們有In [1],然后假設(shè)您要鍵入一個(gè)命令,例如:

print ("Hello, world!")

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-T1WKXLmD-1681367023145)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/3c7060ef-3bf8-4512-9e27-204df317932e.png)]

我們看到一些輸出,然后看到In [2]。

現(xiàn)在讓我們嘗試其他方法:

1 + 1

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-gT9XIgRV-1681367023145)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/f8fbe4b3-179f-4688-a522-102e7ab26012.png)]

In [2]之后,我們看到Out[2]。 這是什么意思? 這是一種在會(huì)話中跟蹤歷史命令及其輸出的方法。 要訪問In [42]的命令,我們輸入_i42。 因此,在這種情況下,如果要查看命令 2 的輸入,請(qǐng)鍵入i2。 注意,它給我們一個(gè)字符串1 + 1。實(shí)際上,我們可以運(yùn)行此字符串。

如果我們輸入eval,然后輸入_i2,請(qǐng)注意,它給我們提供的輸出與原始命令In [2]相同。 現(xiàn)在Out[2]怎么樣? 我們?nèi)绾潍@取實(shí)際輸出? 在這種情況下,我們要做的只是_,然后是輸出的數(shù)量,例如 2。這應(yīng)該給我們 2。因此,這為您提供了一種更方便的方法來(lái)訪問歷史命令及其輸出。

Jupyter 筆記本電腦的另一個(gè)優(yōu)點(diǎn)是您可以看到圖像。 例如,讓我們運(yùn)行 Matplotlib。 首先,我們將使用以下命令導(dǎo)入 Matplotlib:

import matplotlib.pyplot as plt

導(dǎo)入 Matplotlib 之后,回想一下我們需要運(yùn)行某種魔術(shù),即 Matplotlib 魔術(shù):

%matplotlib inline

我們需要給它內(nèi)聯(lián)參數(shù),現(xiàn)在我們可以創(chuàng)建一個(gè) Matplotlib 圖形。 請(qǐng)注意,該圖像顯示在命令的正下方。 當(dāng)我們輸入_8時(shí),它表明創(chuàng)建了 Matplotlib 對(duì)象,但實(shí)際上并未顯示圖本身。 如您所見,與典型的 Python 控制臺(tái)相比,我們可以以更高級(jí)的方式使用 Jupyter 控制臺(tái)。 例如,讓我們使用名為Iris的數(shù)據(jù)集; 使用以下行將其導(dǎo)入:

from sklearn.datasets import load_iris

這是用于數(shù)據(jù)分析的非常常見的數(shù)據(jù)集。 它通常用作求值訓(xùn)練模型的一種方法。 我們還將在此上使用 k 均值聚類:

from sklearn.cluster import KMeans

load_Iris函數(shù)實(shí)際上不是Iris數(shù)據(jù)集; 它是我們可以用來(lái)獲取Iris數(shù)據(jù)集的函數(shù)。 以下命令實(shí)際上將使我們能夠訪問該數(shù)據(jù)集:

iris  = load_iris()

現(xiàn)在,我們將在此數(shù)據(jù)集上訓(xùn)練 K 均值聚類方案:

iris_clusters = KMeans(n_clusters = 3, init =  "random").fit(iris.data)

鍵入函數(shù)時(shí),我們可以立即查看文檔。 例如,我知道n_clusters參數(shù)的含義。 它實(shí)際上是函數(shù)中的原始文檔字符串。 在這里,我希望聚類的數(shù)量為3,因?yàn)槲抑来藬?shù)據(jù)集中實(shí)際上有三個(gè)真實(shí)聚類。 既然已經(jīng)訓(xùn)練了聚類方案,我們可以使用以下代碼對(duì)其進(jìn)行繪制:

plt.scatter(iris.data[:, 0], iris.data[:, 1], c = iris_clusters.labels_)

Spyder

Spyder 是與 Jupyter 筆記本或 Jupyter QT 控制臺(tái)不同的 IDE。 它集成了 NumPy,SciPy,Matplotlib 和 IPython。 它可以通過插件擴(kuò)展,并且包含在 Anaconda 中。

以下屏幕截圖顯示了 Spyder,這是一個(gè)用于數(shù)據(jù)分析和科學(xué)計(jì)算的實(shí)際 IDE:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-L1PjO4MJ-1681367023146)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/ca0a9906-aced-4951-a769-6679c7a0dc9c.png)]

Spyder Python 3.6

在右側(cè),您可以轉(zhuǎn)到文件資源管理器以搜索要加載的新文件。 在這里,我們要打開iris_kmeans.py。 這是一個(gè)文件,其中包含我們之前在 Jupyter QT 控制臺(tái)中使用的所有命令。 請(qǐng)注意,在右側(cè),編輯器有一個(gè)控制臺(tái)。 實(shí)際上就是 IPython 控制臺(tái),您將其視為 Jupyter QT 控制臺(tái)。 我們可以通過單擊 Run 選項(xiàng)卡來(lái)運(yùn)行整個(gè)文件。 它將在控制臺(tái)中運(yùn)行,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-bl8iBZ2B-1681367023146)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/fae7f8db-2540-43cf-a10f-76474350c5ff.png)]

以下屏幕截圖將作為輸出:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-kO1PfgP9-1681367023146)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/2dfc4468-a03e-433a-90c6-d698e12b1019.png)]

注意,最后我們看到了之前看到的聚類結(jié)果。 我們也可以在命令中以交互方式鍵入; 例如,我們可以使計(jì)算機(jī)說(shuō)Hello, world!。

在編輯器中,我們輸入一個(gè)新變量,例如n = 5。 現(xiàn)在,讓我們?cè)诰庉嬈髦羞\(yùn)行此文件。 請(qǐng)注意,n是編輯器可以識(shí)別的變量。 現(xiàn)在讓我們進(jìn)行更改,例如n = 6。 除非我們?cè)俅螌?shí)際運(yùn)行此文件,否則控制臺(tái)將不會(huì)意識(shí)到所做的更改。 因此,如果我再次在控制臺(tái)中鍵入n,則沒有任何變化,仍然是5。 您需要運(yùn)行此行才能實(shí)際看到更改。

我們還有一個(gè)變量瀏覽器,可以在其中查看變量的值并進(jìn)行更改。 例如,我可以將n的值從6更改為10,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-tsCv9WIg-1681367023147)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/284f9dfb-6801-4b6a-ae1c-2ed5fd1f09bd.png)]

以下屏幕截圖顯示了輸出:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Mih8Xydy-1681367023147)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/5dd3a7ac-d098-454b-bbf3-45fec9d1dd4a.png)]

然后,當(dāng)我進(jìn)入控制臺(tái)并詢問n是什么時(shí),它會(huì)說(shuō)10

n
10

到此結(jié)束我們對(duì) Spyder 的討論。

Rodeo

Rodeo 是 Yhat 開發(fā)的 Python IDE,專門用于數(shù)據(jù)分析應(yīng)用。 它旨在模擬在 R 用戶中很流行的 RStudio IDE,并且可以從 Rodeo 的網(wǎng)站上下載。 基本的 Python 解釋器的唯一優(yōu)點(diǎn)是每個(gè) Python 安裝程序都包含它,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-ii5v68YD-1681367023147)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/e63f586b-c60a-49fe-9a52-dee69d209d6c.png)]

ptpython

Jonathan Slenders 設(shè)計(jì)的ptpython可能是鮮為人知的基于控制臺(tái)的 Python REPL。 它僅存在于控制臺(tái)中,并且是他的獨(dú)立項(xiàng)目。 您可以在 GitHub 上找到它。 它具有輕量級(jí)功能,但還包括語(yǔ)法突出顯示,自動(dòng)完成,甚至包括 IPython。 可以使用以下命令進(jìn)行安裝:

pip install ptpython

到此,我們結(jié)束了有關(guān) Jupyter 筆記本替代品的討論。

使用 Conda 進(jìn)行包管理

現(xiàn)在,我們將與 Conda 討論包管理。 在本節(jié)中,我們將研究以下主題:

  • 什么是 Conda?
  • 管理 Conda 環(huán)境
  • 使用 Conda 管理 Python
  • 使用 Conda 管理包

什么是 Conda?

那么什么是 Conda? Conda(Conda)是 Anaconda 的包管理器。 Conda 允許我們創(chuàng)建和管理多個(gè)環(huán)境,從而允許存在多個(gè)版本的 Python,R 及其相關(guān)包。 如果您需要使用不同版本的 Python 及其包針對(duì)不同的系統(tǒng)進(jìn)行開發(fā),這將非常有用。 Conda 允許您管理 Python 和 R 版本,并且還簡(jiǎn)化了包的安裝和管理。

Conda 環(huán)境管理

Conda 環(huán)境允許開發(fā)人員在其包中使用和管理不同版本的 Python。 這對(duì)于在遺留系統(tǒng)上進(jìn)行測(cè)試和開發(fā)很有用。 可以保存,克隆和導(dǎo)出環(huán)境,以便其他人可以復(fù)制結(jié)果。

以下是一些常見的環(huán)境管理命令。

對(duì)于環(huán)境創(chuàng)建:

conda create --name env_name prog1 prog2
conda create --name env_name python=3 prog3

對(duì)于列表環(huán)境:

conda env list

要驗(yàn)證環(huán)境:

conda info --envs

克隆環(huán)境:

conda create --name new_env --clone old_env

刪除環(huán)境:

conda remove --name env_name -all

用戶可以通過創(chuàng)建 YAML 文件來(lái)共享環(huán)境,收件人可以使用該文件來(lái)構(gòu)建相同的環(huán)境。 您可以手動(dòng)執(zhí)行此操作,在其中可以有效地復(fù)制 Anaconda 所做的工作,但是讓 Anaconda 為您創(chuàng)建 YAML 文件要容易得多。

創(chuàng)建了這樣的文件后,或者如果您從其他用戶那里收到了此文件,則創(chuàng)建新環(huán)境非常容易。

管理 Python

如前所述,Anaconda 允許您管理多個(gè)版本的 Python。 可以搜索并查看哪些版本的 Python 可用于安裝。 您可以驗(yàn)證環(huán)境中使用的是哪個(gè)版本的 Python,甚至可以為 Python 2.7 創(chuàng)建環(huán)境。 您還可以更新當(dāng)前環(huán)境中的 Python 版本。

包管理

假設(shè)我們對(duì)安裝包selenium感興趣,該包用于 Web 抓取和 Web 測(cè)試。 我們可以列出當(dāng)前安裝的包,并且可以給出安裝新包的命令。

首先,我們應(yīng)該搜索以查看 Conda 系統(tǒng)是否提供該包。 并非pip上可用的所有包都可從 Conda 獲得。 也就是說(shuō),實(shí)際上可以安裝pip提供的包,盡管希望,如果我們希望安裝包,可以使用以下命令:

conda install selenium

如果selenium是我們感興趣的包,則可以從互聯(lián)網(wǎng)自動(dòng)下載它,除非您具有 Anaconda 可以直接從您的系統(tǒng)直接安裝的文件。

要通過pip安裝包,請(qǐng)使用以下命令:

pip install package_name

當(dāng)然,可以如下刪除包:

conda remove selenium

配置數(shù)據(jù)庫(kù)

現(xiàn)在,我們將開始討論設(shè)置數(shù)據(jù)庫(kù)供您使用。 在本節(jié)中,我們將研究以下主題:

  • 安裝 MySQL
  • 為 Python 安裝 MySQL 連接器
  • 創(chuàng)建,使用和刪除數(shù)據(jù)庫(kù)

為了使 MySQL 和 Python 一起使用,MySQL 連接器是必需的。 存在許多 SQL 數(shù)據(jù)庫(kù)實(shí)現(xiàn),盡管 MySQL 可能不是最簡(jiǎn)單的數(shù)據(jù)庫(kù)管理系統(tǒng),但它功能齊全,具有工業(yè)實(shí)力,在現(xiàn)實(shí)世界中很常見,而且它是免費(fèi)和開源的,這意味著它是一個(gè)很好的學(xué)習(xí)工具。 您可以從 MySQL 的網(wǎng)站上獲取 MySQL 社區(qū)版,它是免費(fèi)和開源的版本。

安裝 MySQL

對(duì)于 Linux 系統(tǒng),如果可能,我建議您使用可用的任何包管理系統(tǒng)安裝 MySQL。 如果您使用的是基于 Red-Hat 的發(fā)行版,則可以使用 YUM;如果您使用的是基于 Debian 的發(fā)行版,則可以使用 APT;或者,請(qǐng)使用 SUSE 的存儲(chǔ)庫(kù)系統(tǒng)。 如果您沒有包管理系統(tǒng),則可能需要從源代碼安裝 MySQL。

Windows 用戶可以直接從其網(wǎng)站安裝 MySQL。 您還應(yīng)該注意,MySQL 包含 32 位和 64 位二進(jìn)制文??件,但是下載的任何程序都可能會(huì)為您的系統(tǒng)安裝正確的版本。

您可以從以下網(wǎng)頁(yè)下載適用于 Windows 的 MySQL:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-AvsLwQRc-1681367023148)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/ee93dcc6-011a-4394-983e-12b44f1d65e8.png)]

我建議您使用 MySQL 安裝程序。 向下滾動(dòng),然后在尋找要下載的二進(jìn)制文件時(shí),請(qǐng)注意,第一個(gè)二進(jìn)制文件表示網(wǎng)絡(luò)社區(qū)。 這將是一個(gè)安裝程序,可在您進(jìn)行安裝時(shí)從互聯(lián)網(wǎng)上下載 MySQL。 請(qǐng)注意,它比另一個(gè)二進(jìn)制文件小得多。 它基本上包括了您能夠安裝 MySQL 所需的一切。 如果您繼續(xù)關(guān)注的話,我會(huì)建議您下載該文件。

通常有可用的發(fā)行版。 這些應(yīng)該是穩(wěn)定的。 開發(fā)版本旁邊是“常規(guī)版本”選項(xiàng)卡。 我建議您不要下載這些,除非您知道自己在做什么。

MySQL 連接器

MySQL 的功能類似于系統(tǒng)上的驅(qū)動(dòng)程序,其他應(yīng)用則與 MySQL 交互,就好像它是驅(qū)動(dòng)程序一樣。 因此,您將需要下載一個(gè) MySQL 連接器,以便能夠?qū)?MySQL 與 Python 結(jié)合使用。 這將允許 Python 與 MySQL 通信。 您最終要做的是將其加載到包中,然后開始與 MySQL 的連接。 可以從 MySQL 的網(wǎng)站下載 Python 連接器。

該網(wǎng)頁(yè)對(duì)于任何操作系統(tǒng)都是通用的,因此您需要選擇適當(dāng)?shù)钠脚_(tái),例如 Linux,OS X 或 Windows。 無(wú)論您使用的是 32 位還是 64 位版本,都需要選擇并下載與系統(tǒng)架構(gòu)最匹配的安裝程序,以及 Python 版本。 然后,您將使用安裝向?qū)б詫⑵浒惭b在系統(tǒng)上。

這是用于下載和安裝連接器的頁(yè)面:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-zS4QnBI6-1681367023148)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/2242e5c4-4157-423d-a7d7-37975dd2b76b.png)]

注意,我們可以在這里選擇哪個(gè)平臺(tái)合適。 我們甚至有獨(dú)立于平臺(tái)的版本和源代碼版本。 也可以使用包管理系統(tǒng)進(jìn)行安裝,例如,如果使用的是基于 Debian 的系統(tǒng),則為 APT;如果使用的是基于 Red-Hat 的系統(tǒng),則為 Ubuntu 或 YUM,等等。 我們有許多不同的安裝程序,因此我們需要知道我們正在使用哪個(gè)版本的 Python。 建議您使用與項(xiàng)目中實(shí)際使用的版本最接近的版本。 您還需要在 32 位和 64 位之間進(jìn)行選擇。 然后,單擊下載并按照安裝程序的說(shuō)明進(jìn)行操作。

因此,數(shù)據(jù)庫(kù)管理是一個(gè)主要主題。 涉及數(shù)據(jù)庫(kù)管理的所有內(nèi)容將使我們遠(yuǎn)遠(yuǎn)超出本書的范圍。 我們不會(huì)談?wù)摵玫臄?shù)據(jù)庫(kù)是如何設(shè)計(jì)的。 我建議您轉(zhuǎn)到另一個(gè)資源,也許是另一個(gè)解釋這些主題的 Packt 產(chǎn)品,因?yàn)樗鼈兒苤匾?關(guān)于 SQL,我們只會(huì)告訴您基本級(jí)別使用 SQL 所需的命令。 也沒有關(guān)于權(quán)限的討論,因此我們將假設(shè)您的數(shù)據(jù)庫(kù)對(duì)使用它的任何用戶都具有完全權(quán)限,并且一次只有一個(gè)用戶。

建立數(shù)據(jù)庫(kù)

在 MySQL 命令行中安裝 MySQL 之后,我們可以使用以下命令創(chuàng)建數(shù)據(jù)庫(kù),其后為數(shù)據(jù)庫(kù)的名稱:

create database

每個(gè)命令必須以分號(hào)結(jié)尾; 否則,MySQL 將等到命令實(shí)際完成。

您可以使用以下命令查看所有可用的數(shù)據(jù)庫(kù):

show databases

我們可以通過以下命令指定要使用的數(shù)據(jù)庫(kù):

use database_name

如果要?jiǎng)h除數(shù)據(jù)庫(kù),可以使用以下命令刪除數(shù)據(jù)庫(kù):

drop database database_name

這是 MySQL 命令行:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-g8KZHqJy-1681367023148)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/52e30627-c754-4336-a108-f81a6a9d9db6.png)]

讓我們練習(xí)管理數(shù)據(jù)庫(kù)。 我們可以使用以下命令創(chuàng)建數(shù)據(jù)庫(kù):

create database mydb

要查看所有數(shù)據(jù)庫(kù),我們可以使用以下命令:

show databases

這里有多個(gè)數(shù)據(jù)庫(kù),其中一些來(lái)自其他項(xiàng)目,但是正如您所看到的,我們剛剛創(chuàng)建的數(shù)據(jù)庫(kù)mydb顯示如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-aYEMJxDz-1681367023149)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4624af19-8534-4869-bcf7-50f7a3c0c526.png)]

如果要使用此數(shù)據(jù)庫(kù),則可以使用命令use mydb。 MySQL 說(shuō)數(shù)據(jù)庫(kù)已更改。 這意味著當(dāng)我發(fā)出諸如創(chuàng)建表,從表中讀取或添加新數(shù)據(jù)之類的命令時(shí),所有這些操作都將由數(shù)據(jù)庫(kù)mydb完成。

假設(shè)我們要?jiǎng)h除數(shù)據(jù)庫(kù)mydb; 我們可以使用以下命令進(jìn)行操作:

drop database mydb

這將刪除數(shù)據(jù)庫(kù)。

總結(jié)

在本章中,向我們介紹了 Anaconda,了解了為什么它是一個(gè)有用的起點(diǎn),然后下載并安裝了它。 我們探索了 Jupyter 的一些替代方法,介紹了如何管理 Anaconda 包,還學(xué)習(xí)了如何設(shè)置 MySQL 數(shù)據(jù)庫(kù)。 不過,在本書的其余部分中,我們都假定已經(jīng)安裝了 Anaconda。 在下一章中,我們將討論如何使用 NumPy,它是數(shù)據(jù)分析中的有用包。 沒有這個(gè)包,使用 Python 進(jìn)行數(shù)據(jù)分析幾乎是不可能的。

二、探索 NumPy

到目前為止,您應(yīng)該已經(jīng)安裝了使用 Python 進(jìn)行數(shù)據(jù)分析所需的一切。 現(xiàn)在讓我們開始討論 NumPy,這是用于管理數(shù)據(jù)和執(zhí)行計(jì)算的重要包。 沒有 NumPy,就不會(huì)使用 Python 進(jìn)行任何數(shù)據(jù)分析,因此了解 NumPy 至關(guān)重要。 本章的主要目標(biāo)是學(xué)習(xí)使用 NumPy 中提供的工具。

本章將討論以下主題:

  • NumPy 數(shù)據(jù)類型
  • 創(chuàng)建數(shù)組
  • 切片數(shù)組
  • 數(shù)學(xué)
  • 方法和函數(shù)

我們從討論數(shù)據(jù)類型開始,這在處理 NumPy 數(shù)組時(shí)在概念上很重要。 在本章中,我們將討論由dtype對(duì)象控制的 NumPy 數(shù)據(jù)類型,這是 NumPy 存儲(chǔ)和管理數(shù)據(jù)的方式。 我們還將簡(jiǎn)要介紹稱為ndarray的 NumPy 數(shù)組,并討論它們的作用。

NumPy 數(shù)組

現(xiàn)在讓我們討論稱為ndarray的 NumPy 數(shù)組。 這些不是您在 C 或 C++ 中可能遇到的數(shù)組。 更好的模擬是 MATLAB 或 R 中的矩陣。 也就是說(shuō),它們的行為類似于數(shù)學(xué)對(duì)象,類似于數(shù)學(xué)向量,矩陣或張量。 盡管它們可以存儲(chǔ)諸如字符串之類的非數(shù)學(xué)信息,但它們的存在主要是為了管理和簡(jiǎn)化對(duì)數(shù)字?jǐn)?shù)據(jù)的操作。ndarray在創(chuàng)建時(shí)被分配了特定的數(shù)據(jù)類型或dtype,并且數(shù)組中所有當(dāng)前和將來(lái)的數(shù)據(jù)必須屬于該dtype。 它們還具有多個(gè)維度,稱為。

一維ndarray是一行數(shù)據(jù); 這將是一個(gè)向量。 二維ndarray將是數(shù)據(jù)的平方,實(shí)際上是一個(gè)矩陣。 三維ndarray將是關(guān)鍵數(shù)據(jù),就像張量一樣。 允許任意數(shù)量的尺寸,但大多數(shù)ndarray都是一維或二維的。

dtype與基本 Python 語(yǔ)言中的類型相似,但 NumPy dtype與其他語(yǔ)言(例如 C,C++ 或 Fortran)中看到的數(shù)據(jù)類型也很相似,因?yàn)樗鼈兊拈L(zhǎng)度是固定的。dtype具有層次結(jié)構(gòu);dtype通常具有字符串描述符,后跟 2 的冪以決定dtype的大小。

以下是常見的dtype列表:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-62B60lYz-1681367023149)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c9a05b8f-94b1-4c7e-8888-fed3265c6cd5.png)]

讓我們看一下我們剛剛討論過的一些內(nèi)容。 我們要做的第一件事是在 NumPy 庫(kù)中加載。 接下來(lái),我們將創(chuàng)建一個(gè) 1 的數(shù)組,它們將是整數(shù)。

這是數(shù)組的樣子:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-V2PvEEYk-1681367023149)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/53e332d4-6601-4803-919f-c1e772c4b24f.png)]

如果我們查看dtype,就會(huì)看到它是int8,即 8 位整數(shù)。 我們還可以創(chuàng)建一個(gè)由 16 位浮點(diǎn)數(shù)填充的數(shù)組。 該數(shù)組看起來(lái)類似于整數(shù)數(shù)組。 1 的末尾有一個(gè)圓點(diǎn); 這有點(diǎn)表明包含的數(shù)據(jù)是浮點(diǎn)而不是整數(shù)。

讓我們創(chuàng)建一個(gè)填充無(wú)符號(hào)整數(shù)的數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-XbY6IwCj-1681367023149)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/3e9f87fd-7331-4399-9396-881a8c917e2d.png)]

同樣,它們?yōu)?1,看起來(lái)與我們以前的相似,但現(xiàn)在讓我們嘗試更改一些數(shù)據(jù)。 例如,我們可以將數(shù)組int_ones中的數(shù)字更改為 -1,就可以了。 但是,如果我嘗試將其以無(wú)符號(hào)整數(shù)更改為 -1,則最終會(huì)得到 255。

讓我們創(chuàng)建一個(gè)填充字符串的數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Z6l1gKCK-1681367023149)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/137bc79a-59ee-44a6-a90f-c8503ecfa0a3.png)]

我們此處未指定dtype參數(shù),因?yàn)橥ǔ?huì)猜測(cè)dtype。 通常會(huì)做出一個(gè)很好的猜測(cè),但是并不能保證。 例如,在這里我想為該數(shù)組的內(nèi)容分配一個(gè)新值Waldo。 現(xiàn)在,此dtype表示您的字符串長(zhǎng)度不能超過四個(gè)。 雖然Waldo有五個(gè)字符,所以當(dāng)我們更改數(shù)組并更改其內(nèi)容時(shí),我們以Wald而不是Waldo結(jié)尾。 這是因?yàn)樗荒艹^五個(gè)字符。 只需要前四個(gè):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-9UkXjMhH-1681367023150)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/9d488485-848b-4c1c-bfaa-6cd76eb8fc72.png)]

我可以手動(dòng)指定dtype并說(shuō)允許使用 16 個(gè)字符; 在這種情況下,Waldo可以正常工作。

特殊數(shù)值

除了dtype對(duì)象之外,NumPy 還引入了特殊的數(shù)值:naninf。 這些可以在數(shù)學(xué)計(jì)算中出現(xiàn)。 不是數(shù)字NaN)。 它表明應(yīng)為數(shù)字的值實(shí)際上不是數(shù)學(xué)定義的。 例如,0/0產(chǎn)生nan。 有時(shí)nan也用于表示缺少的信息; 例如,Pandas 就用這個(gè)。inf表示任意大的數(shù)量,因此在實(shí)踐中,它表示比計(jì)算機(jī)可以想象的任何數(shù)量大的數(shù)量。 還定義了-inf,它的意思是任意小。 如果數(shù)字運(yùn)算爆炸,即迅速增長(zhǎng)而沒有邊界,則可能會(huì)發(fā)生這種情況。

從未等于nan; 沒有定義的事物等于其他事物是沒有意義的。 您需要使用 NumPy 函數(shù)isnan來(lái)識(shí)別nan。 盡管==符號(hào)不適用于nan,但適用于inf。 就是說(shuō),最好還是使用函數(shù)有限或inf來(lái)區(qū)分有限值和無(wú)限值。 定義了涉及naninf的算法,但請(qǐng)注意,它可能無(wú)法滿足您的需求。 定義了一些特殊函數(shù),以幫助避免出現(xiàn)naninf時(shí)出現(xiàn)的問題。 例如,nansum 在忽略nan的同時(shí)計(jì)算可迭代對(duì)象的總和。 您可以在 NumPy 文檔中找到此類函數(shù)的完整列表。 使用它們時(shí),我只會(huì)提及它們。

現(xiàn)在讓我們來(lái)看一個(gè)例子:

  1. 首先,我們將創(chuàng)建一個(gè)數(shù)組,并將其填充為1,-10。 然后,將其除以0,然后看看得到了什么。 所以,當(dāng)我們這樣做時(shí),它會(huì)抱怨,因?yàn)轱@然我們不應(yīng)該除以0。 我們?cè)谛W(xué)學(xué)習(xí)了!

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-QJe4lXqC-1681367023150)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/beb7c2f1-67a7-4273-a78e-b0be573c6963.png)]

也就是說(shuō),它確實(shí)帶有數(shù)字:1/0inf,-1/0-inf0/0不是數(shù)字。 那么我們?nèi)绾螜z測(cè)特殊值呢?

  1. 讓我們首先運(yùn)行一個(gè)錯(cuò)誤的循環(huán):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-1arAbKy3-1681367023150)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/27a62731-2f47-4664-98b7-577852953fa5.png)]

我們將遍歷vec2的每個(gè)可能值,并打印i == np.inf,i == -np.inf的結(jié)果以及i是否等于nan,i == np.nan的結(jié)果。 我們得到的是一張清單;inf-inf的前兩個(gè)塊很好,但是這個(gè)nan不好。 我們希望它檢測(cè)到nan,但它沒有這樣做。 因此,讓我們嘗試使用是nan函數(shù):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-27ZNRIE3-1681367023151)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/5a78d47d-efda-4805-89cc-7184f5541f39.png)]

實(shí)際上,這確實(shí)有效; 我們能夠檢測(cè)到nan。

  1. 現(xiàn)在,讓我們檢測(cè)有限與無(wú)限:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-YoBfkD0o-1681367023151)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4aafb70e-7107-4da8-a8af-083282dd191a.png)]

毫不奇怪,inf不是有限的。-inf都不是。 但是nan既不是有限的也不是無(wú)窮大; 它是未定義的。 讓我們看看執(zhí)行inf + 1,inf * -1nan + 1時(shí)會(huì)發(fā)生什么。 我們總是得到nan。

如果我們將 2 增大到負(fù)無(wú)窮大的冪,則得到的是 0。但是,如果將其提高到無(wú)窮大,我們將得到無(wú)窮大。inf - inf等于NaN而不是任何特定數(shù)字:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-33VzMJ1n-1681367023151)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/de302823-d282-46b1-81d2-a1655f52a956.png)]

  1. 現(xiàn)在,讓我們創(chuàng)建一個(gè)數(shù)組并用數(shù)字999填充它。 如果我們求這個(gè)數(shù)組和自身的冪,換言之,計(jì)算999999次方,那么最終得到的就是inf

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-lSqqXbll-1681367023151)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/d207463c-cb60-4a36-aa60-a938a2aa801a.png)]

對(duì)于這些程序來(lái)說(shuō),這個(gè)數(shù)字太大了。 也就是說(shuō),我們知道這個(gè)數(shù)字實(shí)際上不是無(wú)限的。 它是有限的,但是對(duì)于計(jì)算機(jī)而言,它是如此之大,以至于它也可能是無(wú)限的。

  1. 現(xiàn)在,讓我們創(chuàng)建一個(gè)數(shù)組,并將該數(shù)組的第一個(gè)元素指定為nan。 如果我們對(duì)這個(gè)數(shù)組的元素求和,我們得到的是nan,因?yàn)?code>nan +都是nan

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-SFx9mnYa-1681367023151)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/45324bdd-4926-41d6-aaed-0e6efdb562c7.png)]

但是,如果我們使用函數(shù)nansum,則nan將被忽略,我們將獲得合理的值 4。

創(chuàng)建 NumPy 數(shù)組

現(xiàn)在,我們已經(jīng)討論了 NumPy 數(shù)據(jù)類型,并簡(jiǎn)要介紹了 NumPy 數(shù)組,下面讓我們討論如何創(chuàng)建 NumPy 數(shù)組。 在本節(jié)中,我們將使用各種函數(shù)創(chuàng)建 NumPy 數(shù)組。 有一些函數(shù)可以創(chuàng)建所謂的空ndarray; 用于創(chuàng)建ndarray的函數(shù),其中填充了 0、1 或隨機(jī)數(shù); 以及使用數(shù)據(jù)創(chuàng)建ndarray的函數(shù)。 我們將討論所有這些,以及從磁盤保存和加載 NumPy 數(shù)組。 有幾種創(chuàng)建數(shù)組的方法。 一種方法是使用數(shù)組函數(shù),在此我們提供一個(gè)可迭代的對(duì)象或一個(gè)可迭代的對(duì)象列表,從中將生成一個(gè)數(shù)組。

我們將使用列表列表來(lái)執(zhí)行此操作,但是這些列表可以是元組,元組的元組甚至其他數(shù)組的列表。 還有一些方法可以自動(dòng)創(chuàng)建充滿數(shù)據(jù)的數(shù)組。 例如,我們可以使用諸如ones,zerosrandn之類的函數(shù); 后者填充了隨機(jī)生成的數(shù)據(jù)。 這些數(shù)組需要傳遞一個(gè)元組,該元組確定數(shù)組的形狀,即數(shù)組具有多少維以及每個(gè)維的長(zhǎng)度。 每個(gè)創(chuàng)建的數(shù)組都被認(rèn)為是空的,不包含任何感興趣的數(shù)據(jù)。 這通常是垃圾數(shù)據(jù),由創(chuàng)建數(shù)組的內(nèi)存位置中的任何位組成。

我們可以根據(jù)需要指定dtype參數(shù),但如果不指定,則可以猜測(cè)dtype或浮點(diǎn)數(shù)。 請(qǐng)注意下表中的最后一行:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-7acyMbHk-1681367023152)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/dd0e5908-9020-4161-93b6-ed15a67f7865.png)]

認(rèn)為可以通過將arr1分配給新變量來(lái)復(fù)制它是錯(cuò)誤的。 相反,您實(shí)際上得到的是指向相同數(shù)據(jù)的新指針。 如果您想要一個(gè)具有完全獨(dú)立于其父代的相同數(shù)據(jù)的新數(shù)組,則將需要使用copy方法,我們將看到。

創(chuàng)建ndarray

在下面的筆記本中,我們創(chuàng)建一個(gè)ndarray。 我們要做的第一件事是創(chuàng)建一個(gè) 1 的向量。 注意正在傳遞的元組; 它僅包含一個(gè)數(shù)字5。 因此,它將是具有五個(gè)元素的一維ndarray

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-8JqVi5mq-1681367023152)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/12e69768-3944-4664-b6c5-4458046f4bed.png)]

系統(tǒng)自動(dòng)為其分配了dtype浮點(diǎn) 64:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-khTbz5OE-1681367023152)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/dcec4e5a-58a1-42ca-ac5e-f2a92e02a5f4.png)]

如果我們想將其轉(zhuǎn)換為整數(shù),我們可以首先嘗試通過以下方式進(jìn)行操作,但結(jié)果將是垃圾:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-1y1Z3s3l-1681367023152)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4234f49f-fcc5-4a98-8426-b73ec248839b.png)]

轉(zhuǎn)換dtype時(shí)需要非常小心。

正確的方法是首先創(chuàng)建一個(gè)由五個(gè) 1 組成的原始向量,然后使用這些元素作為輸入來(lái)創(chuàng)建一個(gè)全新的數(shù)組。 結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-6Z2S2dd7-1681367023153)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/f75db329-ed43-4dbe-9d89-90b70549854e.png)]

注意vec1實(shí)際上具有正確的數(shù)據(jù)類型。 當(dāng)然,我們可以通過指定我們最初想要的dtype來(lái)規(guī)避此問題。 在這種情況下,我們需要 8 位整數(shù)。 結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-gMZlHAHO-1681367023153)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/90db700f-ecc0-4db4-bd7c-9b7429254765.png)]

現(xiàn)在,讓我們創(chuàng)建一個(gè) 0 的多維數(shù)據(jù)集。 在這里,我們將創(chuàng)建一個(gè)三維數(shù)組。 也就是說(shuō),我們有行,我們有列,還有樓板。

因此,我們按此順序有兩行,兩列和兩個(gè)平板,我們將把它做成 64 位浮點(diǎn)數(shù)。 結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-IfJDuD7N-1681367023153)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c07321a7-79bf-4e42-b28d-951f94c0cdae.png)]

結(jié)果的頂部將被視為一個(gè)平板,而底部將被視為另一平板。

現(xiàn)在,讓我們創(chuàng)建一個(gè)填充有隨機(jī)數(shù)據(jù)的矩陣。 在這種情況下,我們將使用randn函數(shù)創(chuàng)建一個(gè)具有三行三列的方陣,該函數(shù)是 NumPy 隨機(jī)模塊的一部分:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-xCvbjTAu-1681367023153)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/68db44e7-74f3-44b8-8712-ee9926259dcd.png)]

我們傳遞的第一個(gè)數(shù)字是行數(shù),第二個(gè)數(shù)字是列數(shù)。 您可以傳遞第三個(gè)數(shù)字來(lái)確定平板的數(shù)量,第四個(gè),第五個(gè)等等,以指定所需的維數(shù)以及每個(gè)維的長(zhǎng)度。

現(xiàn)在,我們將創(chuàng)建2 x 2個(gè)具有所選名稱的矩陣,以及2 x 2 x 2個(gè)包含數(shù)字的數(shù)組。 因此,這是一個(gè)僅包含名稱的矩陣:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Q3TQc2eb-1681367023154)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/bd1788b5-bd18-45d8-bb65-2965bc0332fb.png)]

我們可以看到dtypeU5,即五個(gè)字母長(zhǎng)的 Unicode 字符串。

我們還可以使用元組來(lái)創(chuàng)建數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-3sF7PJiQ-1681367023154)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/6eea7c99-9d1f-40bd-84a0-0ec0d41772db.png)]

在這種情況下,我們有一個(gè)具有多個(gè)級(jí)別的數(shù)組,因此最終將是三維數(shù)組。(1, 3, 5)將是此數(shù)組的第一個(gè)平板的第一行,(2, 4, 6)將是第一個(gè)平板的第二行。[(1, 3, 5), (2, 4, 6)]確定第一個(gè)平板。[(1, np.nan, 1), (2, 2, 2)]確定第二個(gè)平板。 總而言之,我們得到了一個(gè)多維數(shù)據(jù)集:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-I5QOwjze-1681367023154)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/360ef440-ccb7-412c-9abe-11852ffb17e5.png)]

如前所述,如果我們希望復(fù)制數(shù)組的內(nèi)容,則需要小心。

考慮以下示例:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-DbQMsxdr-1681367023154)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/9339726a-53dc-4313-a11a-b8900740f8c7.png)]

例如,我們可能天真地認(rèn)為這將創(chuàng)建mat2的新副本,并將其存儲(chǔ)在mat2_copy中。 但是請(qǐng)注意如果我們要更改此數(shù)組的假定副本中的條目,或者更改原始父數(shù)組的條目會(huì)發(fā)生什么。 在mat2中,如果我們將第一行和第一列中的元素(即元素(0, 0))更改為liam,則結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-FWshjTtA-1681367023154)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/f964c0d8-2438-4651-8682-08e1a95bdd28.png)]

如果查看副本,則會(huì)發(fā)現(xiàn)更改也影響了副本:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-SdQBOT9b-1681367023155)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/dc697d4b-f141-4b98-9ac9-73b6027cd8c8.png)]

因此,如果要獨(dú)立副本,則需要使用copy方法。 然后,當(dāng)我們更改mat2的 0,0 元素時(shí),它不會(huì)影響copy,方法:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-BQ2E8HoX-1681367023155)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/fd6ee3d9-59f3-4eb8-8d9d-98b9e7c61c69.png)]

我們還可以對(duì)副本進(jìn)行更改,并且不會(huì)影響父級(jí)。

以下是保存ndarray對(duì)象的常用方法的列表:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-3LX1m1uD-1681367023155)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/d8ce83f0-5dbf-4559-9d09-05239a22de01.png)]

建議您使用savesavezsavetxt函數(shù)。 我已經(jīng)在上表中顯示了這些函數(shù)的通用語(yǔ)法。 在savetxt的情況下,如果要用逗號(hào)分隔的文件,只需將定界符參數(shù)設(shè)置為逗號(hào)字符。 另外,如果文件名以.gz結(jié)尾,則savetxt可以保存壓縮的文本文件,從而節(jié)省了步驟,因?yàn)槟院鬅o(wú)需自己壓縮文本文件。 請(qǐng)注意,除非您編寫完整的文件路徑,否則指定的文件將保存在工作目錄中。

讓我們看看我們?nèi)绾文軌虮4嬉恍?shù)組。 我們可能應(yīng)該做的第一件事是檢查工作目錄是什么:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-UXvwSieP-1681367023155)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/8040cc7b-15d7-4df0-89f5-afbf450ee59d.png)]

現(xiàn)在,在這種情況下,我將自動(dòng)進(jìn)入所需的工作目錄中。 但是,如果我愿意,我可以使用cd命令更改工作目錄,然后,實(shí)際上我會(huì)將那個(gè)目錄作為我的工作目錄:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-mltBnFC4-1681367023155)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/1cbb6855-4f29-4568-9bc2-f31d2a31f5d2.png)]

就是說(shuō),讓我們創(chuàng)建一個(gè)npy文件,它是 NumPy 的本機(jī)文件格式。 我們可以使用 NumPy 的save函數(shù)以此文件格式保存數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-fzIejvI4-1681367023156)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/02387d90-35ec-4ba0-b00e-979069411de2.png)]

我們將擁有一個(gè)名為arr1npy文件。 實(shí)際上,這是我們工作目錄中的一個(gè)二進(jìn)制文件。

如果我們希望加載保存在該文件中的數(shù)組,可以使用load函數(shù):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PFrHgOoO-1681367023156)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/de072811-9bef-4e59-8ad2-ef193f5fe1c0.png)]

我們還可以創(chuàng)建一個(gè)在mat1中包含相同信息的 CSV 文件。 例如,我們可以使用以下函數(shù)保存它:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-26k3SyAM-1681367023156)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/432da793-afdb-4fc1-8d9c-c36e0c990774.png)]

我們可以使用以下代碼查看mat1.csv的內(nèi)容:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-1uxLVwMI-1681367023156)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/773ca119-da58-47cc-9d5c-e54d348f849e.png)]

列用逗號(hào)分隔,行在換行符上。 然后,我們關(guān)閉此文件:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-EJVksRUU-1681367023156)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/92e6a7fc-a97e-4011-ac75-8e2f08d2fe3e.png)]

現(xiàn)在,很明顯,如果我們可以保存ndarray,那么我們也應(yīng)該能夠加載它們。 以下是一些用于加載ndarray的常用函數(shù):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-iSTTumPc-1681367023157)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/b74f654c-d2dd-4144-9fa4-d91ae823639a.png)]

這些函數(shù)與用于保存ndarray的函數(shù)緊密一致。 您將需要在 Python 中保存生成的ndarray。 如果要從文本文件加載,請(qǐng)注意,不必為創(chuàng)建ndarray而由 NumPy 創(chuàng)建數(shù)組。 如果您保存到 CSV,則可以使用文本編輯器或 Excel 創(chuàng)建 NumPy ndarray。 然后,您可以將它們加載到 Python 中。 我假設(shè)您正在加載的文件中的數(shù)據(jù)適合ndarray; 也就是說(shuō),它具有正方形格式,并且僅由一種類型的數(shù)據(jù)組成,因此不包含字符串和數(shù)字。

可以通過ndarray處理多類型的數(shù)據(jù),但是此時(shí)您應(yīng)該使用 pandas 數(shù)據(jù)幀,我們將在后面的部分中進(jìn)行討論。 因此,如果我想加載剛剛創(chuàng)建的文件的內(nèi)容,可以使用loadtxt函數(shù)進(jìn)行加載,結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PD9nFLqv-1681367023157)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/f28be513-9207-4b9c-bb2f-79cf5e1e108a.png)]

總結(jié)

在本章中,我們首先介紹 NumPy 數(shù)據(jù)類型。 然后我們迅速討論了稱為ndarray對(duì)象,的 NumPy 數(shù)組,它們是 NumPy 感興趣的主要對(duì)象。 我們討論了如何根據(jù)程序員的輸入,其他 Python 對(duì)象,文件甚至函數(shù)創(chuàng)建這些數(shù)組。 我們繼續(xù)討論了如何從基本算術(shù)到成熟的線性代數(shù)對(duì)ndarray對(duì)象進(jìn)行數(shù)學(xué)運(yùn)算。

在下一章中,我們將討論一些重要主題:使用數(shù)組對(duì)ndarray對(duì)象算術(shù)和線性代數(shù)進(jìn)行切片,以及采用數(shù)組方法和函數(shù)。

三、NumPy 數(shù)組上的運(yùn)算

現(xiàn)在,我們知道如何創(chuàng)建 NumPy 數(shù)組,我們可以討論切片 NumPy 數(shù)組的重要主題,以便訪問和操作數(shù)組數(shù)據(jù)的子集。 在本章中,我們將介紹每個(gè) NumPy 用戶應(yīng)了解的有關(guān)數(shù)組切片,算術(shù),帶有數(shù)組的線性代數(shù)以及采用數(shù)組方法和函數(shù)的知識(shí)。

顯式選擇元素

如果您知道如何選擇 Python 列表的子集,那么您將了解有關(guān)ndarray切片的大部分知識(shí)。 與索引對(duì)象的元素相對(duì)應(yīng)的被索引數(shù)組元素在新數(shù)組中返回。 索引編制的最重要方面是要記住存在多個(gè)維度,并且索引編制方法應(yīng)能夠處理這些其他維度。

明確選擇元素時(shí),請(qǐng)記住以下幾點(diǎn):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-XSCIfnWG-1681367023157)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/dd4c8b0f-33bd-41dc-8c0e-d60623965fda.png)]

用逗號(hào)分隔不同維度的索引對(duì)象; 第一個(gè)逗號(hào)之前的對(duì)象顯示了如何索引第一維。 在第一個(gè)逗號(hào)之后是第二個(gè)維度的索引,在第二個(gè)逗號(hào)之后是第三個(gè)維度的索引,依此類推。

用冒號(hào)切片數(shù)組

使用冒號(hào)索引ndarray對(duì)象的工作類似于使用冒號(hào)索引列表。 只要記住,現(xiàn)在有多個(gè)維度。 請(qǐng)記住,當(dāng)冒號(hào)之前或之后的點(diǎn)留為空白時(shí),Python 會(huì)將索引視為擴(kuò)展到維的開始或結(jié)束。 可以指定第二個(gè)冒號(hào),以指示 Python 跳過每隔一行或反轉(zhuǎn)行的順序,具體取決于第二個(gè)冒號(hào)下的數(shù)目。

使用冒號(hào)對(duì)數(shù)組進(jìn)行切片時(shí),需要記住以下幾點(diǎn):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-0tHNs6Y0-1681367023157)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/163f227b-8deb-49ee-be42-93a3d410ecc9.png)]

讓我們來(lái)看一個(gè)例子。 首先,我們加載 NumPy 并創(chuàng)建一個(gè)數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-zW0k2NKA-1681367023158)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/af0927e8-301a-42be-9310-3d7474e8d22b.png)]

注意,我們創(chuàng)建的是三維數(shù)組。 現(xiàn)在,這個(gè)數(shù)組有點(diǎn)復(fù)雜,所以讓我們使用二維3 x 3數(shù)組代替 :

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-EZvPFrBf-1681367023158)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4b7191f0-9604-4d41-ade1-a94f825cc394.png)]

我們?cè)谶@里使用了復(fù)制方法。 返回了一個(gè)新對(duì)象,但是該對(duì)象不是數(shù)組的新副本; 它是數(shù)組內(nèi)容的視圖。 因此,如果我們希望創(chuàng)建一個(gè)獨(dú)立的副本,則在切片時(shí)也需要使用copy方法,如我們之前所見。

如果要更改此新數(shù)組中的條目,將第二行和第二列的內(nèi)容設(shè)置為Atilla,則可以更改此新數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-9YdQRWmg-1681367023158)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/a14afb7d-7531-4172-8cf0-16e2a3686a5f.png)]

但是我們沒有更改原始內(nèi)容:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-gQHxBvpa-1681367023158)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/8065a920-5926-4da4-b25f-ffa671e97dcb.png)]

因此,這些是第一個(gè)數(shù)組中數(shù)據(jù)的兩個(gè)獨(dú)立副本。 現(xiàn)在讓我們探索其他切片方案。

在這里,我們看到使用列表建立索引。 我們要做的是創(chuàng)建一個(gè)列表,該列表與我們要捕獲的對(duì)象中每個(gè)元素的第一個(gè)坐標(biāo)相對(duì)應(yīng),然后為第二個(gè)坐標(biāo)提供一個(gè)列表。 因此 1 和 0 對(duì)應(yīng)于我們希望選擇的一個(gè)元素; 如果這是三維對(duì)象,我們將需要第三個(gè)列表作為第三個(gè)坐標(biāo):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Qjx0mPgU-1681367023158)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/dbca1a1b-e7bb-4b0d-98a6-1d18cbf8fc98.png)]

我們使用切片器從左上角選擇元素:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-aB1G3Wi1-1681367023159)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/40172430-b3d5-42c0-8352-764244934c4f.png)]

現(xiàn)在,讓我們從中間一欄中選擇元素:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-42iZAZTj-1681367023159)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4cc32014-9940-41e7-9119-8e39ea17c51b.png)]

并且,讓我們從中間列中選擇元素,但我們不會(huì)展平矩陣,而是保持其形狀:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-kvDCXSoL-1681367023159)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/0496fafd-12d4-4609-9bd7-00ea5b6e184d.png)]

這是一維對(duì)象,但是在這里我們需要一個(gè)二維對(duì)象。 盡管只有一列,但只有一列和一行,而不是只有一行和一列是沒有意義的。 現(xiàn)在讓我們選擇中間列的最后兩行:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-1wcCwFBc-1681367023159)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/3b069361-e914-4be8-82ca-5de10e97f5e6.png)]

我們反轉(zhuǎn)行順序:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-iWts4NLb-1681367023160)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/7ac075aa-ffdc-4e40-8122-44975eb2aeab.png)]

如果查看原始對(duì)象,則會(huì)發(fā)現(xiàn)這些規(guī)則以相反的順序發(fā)生(與最初的排序方式相比),這意味著選擇奇數(shù)列:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-7ZkIxX5l-1681367023160)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/8a40d17d-96b8-4941-9e5a-b021835166e4.png)]

我們可以轉(zhuǎn)到更復(fù)雜的三維數(shù)組,并查看類似的切片方案。 例如,這是一個(gè)2 x 2 x 2的角落立方體:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-lCfrjgai-1681367023160)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/71d20c8d-94ee-42a8-bcd0-5873b5436fa9.png)]

這是中間部分:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-CcCb29yc-1681367023160)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c0f97afc-f0ea-4844-a5b2-693f6e425405.png)]

我們可以看到該中間切片是二維數(shù)組。 因此,如果我們希望保留維數(shù),那么另一種方法是使用 NumPy 中的新軸對(duì)象插入一個(gè)額外的維數(shù):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-wwcqgYOO-1681367023160)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/11ef9cf1-1380-4b4d-b6bb-c7cbda525b09.png)]

我們看到這個(gè)對(duì)象實(shí)際上是三維的:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-yetvPXsH-1681367023161)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/b4c482b3-2c3f-484b-9399-54c8d10a3db4.png)]

盡管事實(shí)上其中一個(gè)維度的長(zhǎng)度為 1。

高級(jí)索引

現(xiàn)在讓我們討論更高級(jí)的索引技術(shù)。 我們可以使用其他ndarrayndarray對(duì)象建立索引。 我們可以使用包含與我們希望選擇的ndarray的索引對(duì)應(yīng)的整數(shù)的ndarray對(duì)象或布爾值的ndarray對(duì)象來(lái)切片ndarray對(duì)象,其中值true表示切片中應(yīng)包含一個(gè)單元格。

選擇不是Waynearr2元素,這是結(jié)果:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-R9hcyjwx-1681367023161)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/ac3484b4-148f-429a-8a45-8438a9099552.png)]

Wayne不包括在選擇中,這是為執(zhí)行該索引而生成的數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-KQWmihXT-1681367023161)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/e8020cee-2b6f-4749-a0fa-0853b8d9ccdf.png)]

除了內(nèi)容為Wayne的地方,到處都是True。

另一種更高級(jí)的技術(shù)是使用整數(shù)數(shù)組進(jìn)行選擇,以標(biāo)識(shí)所需的元素。 因此,在這里,我們將創(chuàng)建兩個(gè)用于切片的數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-I3XnN999-1681367023161)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/8fad7f33-bca1-4121-8837-9e70331b95a0.png)]

第一個(gè)數(shù)組中的第一個(gè) 0 表示第一個(gè)坐標(biāo)為零,第二個(gè)數(shù)組中的第一個(gè) 0 表示第二個(gè)坐標(biāo)為零,這由這兩個(gè)數(shù)組列出的順序指定。因此,所得數(shù)組的第一行和第一列的元素為[0, 0]。 在第一行和第二列中,我們有原始數(shù)組中的元素[0, 2]。 然后,在第二行和第一列中,我們具有原始數(shù)組的第三行和第一列中的元素。 注意,這是Wayne

然后,我們有了原始數(shù)組的第三行和第三列中的元素,該元素對(duì)應(yīng)于Joey。

讓我們來(lái)看一下更復(fù)雜的數(shù)組。 例如,我們可以看到arr1以外的所有條目Curtis

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-E8bVdrYB-1681367023162)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/3d8e7ad6-8e26-4267-8894-56ecc09bc246.png)]

這是索引數(shù)組的樣子:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-NhdD8Psq-1681367023162)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/8d38cc7c-8b76-406d-82e3-8e995d1cab0e.png)]

在這里,我們看到了一個(gè)更為復(fù)雜的切片方案:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-MKPQdkX6-1681367023162)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/7a8488bc-412e-4246-bda9-96d66bb31cc5.png)]

idx0指示如何選擇第一個(gè)坐標(biāo),idx1指示如何選擇第二個(gè)坐標(biāo),idx2指示如何選擇第三個(gè)坐標(biāo)。 在這種情況下,我們?cè)谠紨?shù)組的每個(gè)四分之一元素中選擇對(duì)象。

因此,我實(shí)際上已經(jīng)編寫了一些代碼,可以實(shí)際演示哪些元素將顯示在新數(shù)組中,即,原始數(shù)組中的坐標(biāo)對(duì)新數(shù)組中的元素而言是什么。

例如,我們得到的是一個(gè)二維矩陣2 x 2 x 2。如果我們想知道切片對(duì)象的第二行,第二列和第一個(gè)平板中的內(nèi)容,則可以使用如下代碼 :

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Inpxixgv-1681367023162)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/6775c4bd-a18b-4f5d-82a1-054281393b62.png)]

那是原始數(shù)組的元素 2、0、2。

擴(kuò)展數(shù)組

連接函數(shù)允許使用屏幕上顯示的語(yǔ)法沿公共軸將數(shù)組綁定在一起。 該方法要求數(shù)組沿未用于綁定的軸具有相似的形狀。 結(jié)果就是全新的ndarray,這是將數(shù)組粘合在一起的產(chǎn)物。 為此,還存在其他類似函數(shù),例如堆疊。 我們不會(huì)涵蓋所有內(nèi)容。

假設(shè)我們想向arr2添加更多行。 使用以下代碼執(zhí)行此操作:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-BqaVXSV9-1681367023162)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/e700972d-12c9-4034-b0d3-306ec2834ddc.png)]

我們創(chuàng)建一個(gè)全新的數(shù)組。 在這種情況下,我們不需要使用copy方法。 結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-DnjdiMQT-1681367023163)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/ff450802-d16c-42d4-93fa-e7185eaa62b5.png)]

我們?cè)诖藬?shù)組中添加了第四行,將新數(shù)組與數(shù)據(jù)(數(shù)組中的名稱)綁定在一起。 它仍然是一個(gè)二維數(shù)組。 例如,請(qǐng)參見以下示例中的數(shù)組。 您可以清楚地看到這是二維的,但只有一列,而前一個(gè)只有一列,這是我們?cè)诖诵铝兄刑砑雍蟮慕Y(jié)果:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-O4k3wM69-1681367023163)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/cf51cf02-cb2b-482a-926d-a82c002a1490.png)]

我們將繼續(xù)對(duì)數(shù)組進(jìn)行數(shù)學(xué)運(yùn)算。

帶數(shù)組的算術(shù)和線性代數(shù)

現(xiàn)在,我們已經(jīng)了解了如何使用 NumPy 數(shù)組創(chuàng)建和訪問信息,讓我們介紹一下可以對(duì)數(shù)組執(zhí)行的一些數(shù)值運(yùn)算。 在本節(jié)中,我們將討論使用 NumPy 數(shù)組的算法。 我們還將討論將 NumPy 數(shù)組用于線性代數(shù)。

兩個(gè)形狀相等的數(shù)組的算術(shù)

NumPy 數(shù)組的算術(shù)總是按組件進(jìn)行的。 這意味著,如果我們有兩個(gè)形狀相同的矩陣,則通過匹配兩個(gè)矩陣中的相應(yīng)分量并將它們相加來(lái)完成諸如加法之類的操作。 對(duì)于任何算術(shù)運(yùn)算都是如此,無(wú)論是加法,減法,乘法,除法,冪,甚至是邏輯運(yùn)算符。

讓我們來(lái)看一個(gè)例子。 首先,我們創(chuàng)建兩個(gè)隨機(jī)數(shù)據(jù)數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-4f3ERKvP-1681367023163)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/f96b8cbf-5d45-451d-9f0e-d0c8ddc7ebf9.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-CG5MUaWA-1681367023163)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/d298f336-cf3a-4f8c-81d0-5a0652967533.png)]

雖然我用涉及兩個(gè)數(shù)組的算術(shù)方式解釋了這些想法,但正如我們?cè)诖颂幙吹降哪菢?,它可能涉及?shù)組和標(biāo)量,我們將100添加到arr1中的每個(gè)元素中:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-KbJP2bcW-1681367023163)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/eea17a05-7c4e-4196-8bb9-374f5efa7ab7.png)]

接下來(lái),我們將arr1中的每個(gè)元素除以2

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-kKYPkMp8-1681367023164)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4c43d04b-0e78-4aeb-995a-2619bfbddf09.png)]

接下來(lái),將arr1中的每個(gè)元素提升為2的冪:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-9zuZQuEt-1681367023164)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/daba0abb-a6db-4245-8828-85a0b153641f.png)]

接下來(lái),我們將arr1arr2的內(nèi)容相乘:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-OZ5a9FCK-1681367023164)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/209966df-2b39-418f-8748-460afe369d74.png)]

請(qǐng)注意,arr1arr2的形狀相似。 在這里,我們進(jìn)行了涉及這兩個(gè)數(shù)組的更復(fù)雜的計(jì)算:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-KBqHvncN-1681367023164)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c0e90f0c-9107-4e67-acac-15aad71e9bd9.png)]

注意,此計(jì)算最終產(chǎn)生了infnan。

廣播

到目前為止,我們已經(jīng)處理了兩個(gè)形狀相同的數(shù)組。 實(shí)際上,這不是必需的。 盡管我們不一定要添加兩個(gè)任意形狀的數(shù)組,但是在某些情況下,我們可以合理地對(duì)不同形狀的數(shù)組執(zhí)行算術(shù)運(yùn)算。 從某種意義上說(shuō),較小數(shù)組中的信息被視為屬于相同形狀但具有重復(fù)值的數(shù)組。 讓我們看看實(shí)際的廣播行為。

現(xiàn)在,回想一下數(shù)組arr13 x 3 x 3; 也就是說(shuō),它具有三行,三列和三個(gè)平板。 在這里,我們創(chuàng)建一個(gè)對(duì)象arr3

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-FIjqn3y1-1681367023165)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/3933075d-3add-41e7-ab02-a7ddac1faf9e.png)]

該對(duì)象的形狀為(1, 1, 3)。 因此,此對(duì)象的平板數(shù)與arr1相同,但只有一行和一列。 這是可以應(yīng)用廣播的情況; 實(shí)際上,這是結(jié)果:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-xMHFcfki-1681367023165)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/cc993b4c-c0a0-4b16-bbb7-a5fe7227e792.png)]

我將第 0 列和第 2 列設(shè)為 0,將中間列設(shè)為 1。因此,結(jié)果是我有效地選擇了中間列并將其他兩列設(shè)置為 0。有效地復(fù)制了該對(duì)象,因此好像我將arr1乘以一個(gè)對(duì)象一樣,其中第一列為 0,第三列為 0,第二列為 1。

現(xiàn)在,讓我們看看如果切換此對(duì)象的尺寸會(huì)發(fā)生什么? 因此,現(xiàn)在它具有一列,一個(gè)平板和三行:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-N5qc7zZo-1681367023165)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/0d30cbca-e184-4779-bc56-f5b2332b3943.png)]

結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-4OnglQBs-1681367023165)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/7db3d7e3-45ce-48eb-bf0c-5890de4dee64.png)]

現(xiàn)在,讓我們進(jìn)行另一個(gè)換位。 我們將最終將一個(gè)具有三個(gè)平板的對(duì)象相乘,中間的平板由 1 填充。 因此,當(dāng)我進(jìn)行乘法運(yùn)算時(shí),會(huì)發(fā)生以下情況:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PwVGm1YD-1681367023166)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/e73ffc17-b8e1-4085-af9b-4e47e4d7e2c6.png)]

線性代數(shù)

請(qǐng)注意,NumPy 是為支持線性代數(shù)而構(gòu)建的。 一維 NumPy 數(shù)組可以對(duì)應(yīng)于線性代數(shù)向量; 矩陣的二維數(shù)組; 和 3D,4D 或所有ndarray到張量。 因此,在適當(dāng)?shù)臅r(shí)候,NumPy 支持線性代數(shù)運(yùn)算,例如數(shù)組的矩陣乘積,轉(zhuǎn)置,矩陣求逆等。linalg模塊支持大多數(shù) NumPy 線性代數(shù)函數(shù)。 以下是常用的 NumPy 線性代數(shù)函數(shù)的列表:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-511shsuv-1681367023166)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/947424be-4f60-4dc5-ab46-b64a30b26289.png)]

其中一些是ndarray方法,其他則在您需要導(dǎo)入的linalg模塊中。 因此,我們實(shí)際上已經(jīng)在較早的示例中演示了轉(zhuǎn)置。 注意,我們?cè)谶@里使用轉(zhuǎn)置來(lái)在行和列之間交換。

這是arr4中的轉(zhuǎn)置:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-FtYvM3mC-1681367023166)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/f7a9f0cd-719f-4d06-bdda-0b7dc921a6e2.png)]

我說(shuō)arr4arr3,我們繞著軸切換。 因此,軸 0 仍將是軸 0,但軸 1 將是舊數(shù)組的軸 2,而軸 2 將是舊數(shù)組的軸 1。

現(xiàn)在,讓我們看看其他示例。 讓我們看一下重塑的演示。 因此,我們要做的第一件事是創(chuàng)建一個(gè)由八個(gè)元素組成的數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-O1HEEIVc-1681367023166)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/fbe3c803-540a-4bd0-8173-4a9a4cccb241.png)]

我們可以重新排列此數(shù)組的內(nèi)容,使其適合其他形狀的數(shù)組。 現(xiàn)在,需要的是新數(shù)組具有與原始數(shù)組相同數(shù)量的元素。 因此,創(chuàng)建一個(gè)2 x 4數(shù)組,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-rvAygJWZ-1681367023167)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/9ff57a7c-299e-44f2-9aae-7bfbcba58140.png)]

與原始數(shù)組一樣,它具有八個(gè)元素。 此外,它還創(chuàng)建了一個(gè)數(shù)組,其中第一行包含原始數(shù)組的前四個(gè)元素,第二行包含其余元素。 我可以用arr6做類似的操作:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-3zlgzn85-1681367023167)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/e54f5721-61e0-4cac-9343-5b3a39c830f6.png)]

您可以通過查看此數(shù)組的邏輯方式來(lái)猜測(cè)。

現(xiàn)在讓我們看一些更復(fù)雜的線性代數(shù)函數(shù)。 讓我們從 Sklearn 庫(kù)的數(shù)據(jù)集模塊中加載一個(gè)名為load_iris的函數(shù),以便我們可以查看經(jīng)典的鳶尾花數(shù)據(jù)集:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-sm7cY4pc-1681367023167)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/97bf54b1-56e6-4936-9afa-b1bf10da93a9.png)]

所以以下是iris的轉(zhuǎn)置:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PWizNQCt-1681367023167)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/495b4cb9-950f-4685-ad2e-379f54cb1d08.png)]

復(fù)制此數(shù)組,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-eVBX5Lkd-1681367023167)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/280c0309-eb08-4c7f-a163-d90d2c923790.png)]

我還想創(chuàng)建一個(gè)僅包含鳶尾花副本最后一列的新數(shù)組,并創(chuàng)建另一個(gè)包含其余列和全為 1 的列的數(shù)組。

現(xiàn)在,我們將創(chuàng)建一個(gè)與矩陣乘積相對(duì)應(yīng)的新數(shù)組。 所以我說(shuō)X平方是X轉(zhuǎn)置并乘以X,這就是結(jié)果數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-FuA4E79z-1681367023168)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/bf272c7e-734d-4e2c-8f2c-1d1e5d90038e.png)]

它是4 x 4?,F(xiàn)在讓我們得到一個(gè)逆矩陣X的平方。

這將是矩陣逆:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-eninuexf-1681367023168)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/0f98403f-4fa3-4fba-aec1-c893f18addc5.png)]

然后,我取這個(gè)逆,然??后將其乘以X的轉(zhuǎn)置乘積與矩陣Y的乘積,矩陣Y是我之前創(chuàng)建的那個(gè)單列矩陣。 結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-QTgvZTwt-1681367023168)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/793b3b23-eb4d-41b2-92a3-241e2ee05250.png)]

這不是任意的計(jì)算順序; 它實(shí)際上對(duì)應(yīng)于我們求解線性模型系數(shù)的方式。 原始矩陣y = iris_cp[:, 3]對(duì)應(yīng)于我們要使用X的內(nèi)容預(yù)測(cè)的變量的值; 但是現(xiàn)在,我只想演示一些線性代數(shù)。 當(dāng)遇到的函數(shù)時(shí),您現(xiàn)在就知道自己編寫此函數(shù)所需的所有代碼。

我們?cè)跀?shù)據(jù)分析中經(jīng)常要做的另一件事是找到矩陣的 SVD 分解,并且在此線性代數(shù)函數(shù)中提供了 SVD 分解:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-iWNYtauG-1681367023168)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c1c9b11f-b590-4921-96da-160a30dde065.png)]

因此,最后一行對(duì)應(yīng)于奇異值。 奇異值分解SVD),輸出中的值是矩陣的奇異值。 以下是左奇異向量:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-zmi26AAJ-1681367023169)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/1a2c9e30-0d14-47a5-9583-c2d5824e7245.png)]

這些是正確的奇異向量:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-MCbEWu7r-1681367023169)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/5d2aa92e-60d1-4e7f-89aa-f1a01dd3bb56.png)]

使用數(shù)組方法和函數(shù)

現(xiàn)在,我們將討論 NumPy 數(shù)組方法和函數(shù)的使用。 在本節(jié)中,我們將研究常見的ndarray函數(shù)和方法。 這些函數(shù)使您可以使用簡(jiǎn)潔,直觀的語(yǔ)法執(zhí)行常規(guī)任務(wù),而不僅僅是 Python 代碼的概念。

數(shù)組方法

NumPy ndarray函數(shù)包含一些有助于完成常見任務(wù)的方法,例如查找數(shù)據(jù)集的均值或多個(gè)數(shù)據(jù)集的多個(gè)均值。 我們可以對(duì)數(shù)組的行和列進(jìn)行排序,找到數(shù)學(xué)和統(tǒng)計(jì)量,等等。 有很多函數(shù)可以完成很多事情! 我不會(huì)全部列出。 在下面,我們看到了常見管理任務(wù)所需的函數(shù),例如將數(shù)組解釋為列表或?qū)?shù)組內(nèi)容進(jìn)行排序:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-TmgqymHl-1681367023169)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/fcedd7e4-37bf-4748-811c-80ffbfad1457.png)]

接下來(lái),我們將看到常見的統(tǒng)計(jì)和數(shù)學(xué)方法,例如查找數(shù)組內(nèi)容的均值或總和:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-ICBtBPf4-1681367023169)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/8621ecc1-012a-4343-9ec6-033da0ba19f1.png)]

我們還有一些用于布爾值數(shù)組的方法:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-GzvZD7HG-1681367023169)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/568c19b3-e306-4a48-b0f2-5cc093b6422f.png)]

讓我們?cè)诠P記本中查看其中一些。 導(dǎo)入 NumPy 并創(chuàng)建一個(gè)隨機(jī)值數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-n9SnxBT7-1681367023170)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/af29b35f-17ce-4ac2-980c-159215be2517.png)]

讓我們看看我們可以在此數(shù)組上執(zhí)行的一些操作。 我們可以做的一件事是將數(shù)組強(qiáng)制為列表:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-TpUNd304-1681367023170)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/ba2fae42-8863-4c5c-a04b-580ad14dc931.png)]

我們可以將數(shù)組展平,使其從4 x 4數(shù)組變?yōu)橐痪S數(shù)組,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-SQ3wIMAa-1681367023170)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/90aef03f-ec71-4f3d-80e8-2f9953006162.png)]

我們還可以使用fill方法填充一個(gè)空數(shù)組。 在這里,我創(chuàng)建了一個(gè)用于字符串的空數(shù)組,并用字符串Carlos填充了它:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-GytVQzLI-1681367023171)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/8ed9442b-16e1-4ccc-a42a-888d6d544fa7.png)]

我們可以取一個(gè)數(shù)組的內(nèi)容并將它們加在一起:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PJFjbl3q-1681367023171)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/02492999-327d-4bdf-8971-8cb6b456c737.png)]

它們也可以沿軸求和。 接下來(lái),我們沿行求和:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-k8IMqaFW-1681367023171)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/0c5848ce-1041-4e75-86cd-ce2ff4feb9b1.png)]

在下面的內(nèi)容中,我們沿列進(jìn)行求和:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-nEw9gZHP-1681367023171)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/05fda044-ecdf-4c1f-bfd4-a72be99ecdee.png)]

累積總和允許您執(zhí)行以下操作,而不是對(duì)行的全部?jī)?nèi)容求和:

  • 對(duì)第一行求和
  • 然后將第一行和第二行相加
  • 然后第一,第二和第三行
  • 然后是第一第二,第三和第四行,依此類推

接下來(lái)可以看到:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-qr5JMLDh-1681367023172)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/fefb42e0-e214-456a-b32a-74909478cd87.png)]

ufuncs的向量化

ufunc是專門用于數(shù)組的 NumPy 函數(shù); 特別地,它們支持向量化。 向量化函數(shù)按組件方式應(yīng)用于數(shù)組的元素。 這些通常是高度優(yōu)化的函數(shù),可以在較快的語(yǔ)言(例如 C)的后臺(tái)運(yùn)行。

在下面,我們看到一些常見的ufuncs,其中許多是數(shù)學(xué)上的:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-42jN8lfm-1681367023172)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/b61a65a6-9cb0-4d42-9085-38c799153d16.png)]

讓我們來(lái)探討ufuncs的一些應(yīng)用。 我們要做的第一件事是找到arr1中每個(gè)元素的符號(hào),即它是正,負(fù)還是零:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-OBag2gCp-1681367023172)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/d2558b96-aa64-4e4a-83b0-7e9496a9dfdb.png)]

然后用這個(gè)符號(hào),將該數(shù)組乘以arr1。 結(jié)果就好像我們?nèi)×?code>arr1的絕對(duì)值:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-NGhFAkBc-1681367023172)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/a9d4550c-b604-48c2-80d9-19b345d12f63.png)]

現(xiàn)在,我們找到產(chǎn)品內(nèi)容的平方根。 由于每個(gè)元素都是非負(fù)的,因此平方根是明確定義的:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-UNB1uqU4-1681367023172)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/ca953354-cd40-4edc-b718-2a94f81f88b8.png)]

自定義函數(shù)

如前所述,我們可以創(chuàng)建自己的ufuncs。 創(chuàng)建ufuncs的一種方法是使用現(xiàn)有的ufuncs,向量化操作,數(shù)組方法等(即 Numpy 的所有現(xiàn)有基礎(chǔ)結(jié)構(gòu))來(lái)創(chuàng)建一個(gè)函數(shù),該函數(shù)逐個(gè)組件地生成我們想要的結(jié)果。 假設(shè)由于某些原因我們不想這樣做。 如果我們有一個(gè)現(xiàn)有的 Python 函數(shù),而只想對(duì)該函數(shù)進(jìn)行向量化處理,以便將其應(yīng)用于ndarray組件,則可以使用 NumPy 的vectorize函數(shù)創(chuàng)建該函數(shù)的新向量化版本。 vectorize將函數(shù)作為輸入,并將函數(shù)的向量化版本作為輸出。

如果您不關(guān)心速度,可以使用vectorize,但是vectorize創(chuàng)建的函數(shù)不一定很快。 實(shí)際上,前一種方法(使用 NumPy 的現(xiàn)有函數(shù)和基礎(chǔ)結(jié)構(gòu)來(lái)創(chuàng)建您的向量化函數(shù))可將ufuncs的生成速度提高許多倍。

我們要做的第一件事是定義一個(gè)適用于單個(gè)標(biāo)量值的函數(shù)。 它的作用是截?cái)啵虼巳绻粋€(gè)數(shù)字小于零,則該數(shù)字將替換為零:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PKWhjoQF-1681367023173)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/3ff39dbc-d824-4de3-8b8b-faf4e2a98576.png)]

此函數(shù)未向量化; 讓我們嘗試將此函數(shù)應(yīng)用于矩陣arr1

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Z81ACqcn-1681367023173)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/04f9f215-dec1-4240-abf7-8eb57454d11e.png)]

然后,我們希望該矩陣中每個(gè)錯(cuò)誤的數(shù)量都改為零。 但是,當(dāng)我們嘗試應(yīng)用此函數(shù)時(shí),它根本不起作用:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-zVr484ot-1681367023173)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/6cc5d3ea-e108-4b80-84b6-60cc1a24d15f.png)]

我們需要做的是創(chuàng)建一個(gè)ufunc,其函數(shù)與原始函數(shù)相同。 因此,我們使用 vectorize 并可以創(chuàng)建可以按預(yù)期工作的向量化版本,但效率不高:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Y9et8uBh-1681367023173)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/bcddac11-fa34-4ee4-b31b-c01e539951bc.png)]

我們可以通過創(chuàng)建一個(gè)使用 NumPy 的現(xiàn)有基礎(chǔ)架構(gòu)的更快版本來(lái)看到這一點(diǎn),例如基于布爾值的索引,并將值分配為零。 這是結(jié)果ufunc

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-1D8uxX7F-1681367023174)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/380190d1-54f2-4971-8bef-0e5f9196d14b.png)]

讓我們比較這兩個(gè)函數(shù)的速度。 以下是使用vectorize創(chuàng)建的向量化版本:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-UKmpgEdK-1681367023174)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/a4a3a475-cc94-4a82-88c4-06b7329e39c1.png)]

接下來(lái)是手動(dòng)創(chuàng)建的一個(gè):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Zdu21qb5-1681367023174)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/359ff8e0-9562-4334-a16a-10c1e7f6a1d1.png)]

請(qǐng)注意,第一個(gè)函數(shù)比手動(dòng)創(chuàng)建的第二個(gè)函數(shù)要慢得多。 實(shí)際上,它慢了將近 10 倍。

總結(jié)

在本章中,我們從顯式選擇數(shù)組中的元素開始。 我們研究了高級(jí)索引編制和擴(kuò)展數(shù)組。 我們還用數(shù)組介紹了一些算術(shù)和線性代數(shù)。 我們討論了使用數(shù)組方法和函數(shù)以及ufuncs的向量化。 在下一章中,我們將開始學(xué)習(xí)另一個(gè)有影響力的包,稱為 Pandas 。

四、Pandas 很有趣! 什么是 Pandas?

在之前的章節(jié)中,我們已經(jīng)討論過 NumPy。 現(xiàn)在讓我們繼續(xù)學(xué)習(xí) pandas,這是一個(gè)經(jīng)過精心設(shè)計(jì)的包,用于在 Python 中存儲(chǔ),管理和處理數(shù)據(jù)。 我們將從討論什么是 Pandas 以及人們?yōu)槭裁词褂?Pandas 開始本章。 接下來(lái),我們將討論 Pandas 提供的兩個(gè)最重要的對(duì)象:序列和數(shù)據(jù)幀。 然后,我們將介紹如何子集您的數(shù)據(jù)。 在本章中,我們將簡(jiǎn)要概述什么是 Pandas 以及其受歡迎的原因。

Pandas 做什么?

pandas 向 Python 引入了兩個(gè)關(guān)鍵對(duì)象,序列和數(shù)據(jù)幀,后者可能是最有用的,但是 pandas 數(shù)據(jù)幀可以認(rèn)為是綁定在一起的序列。 序列是一序列數(shù)據(jù),例如基本 Python 中的列表或一維 NumPy 數(shù)組。 而且,與 NumPy 數(shù)組一樣,序列具有單個(gè)數(shù)據(jù)類型,但是用序列進(jìn)行索引是不同的。 使用 NumPy 時(shí),對(duì)行和列索引的控制不多; 但是對(duì)于一個(gè)序列,該序列中的每個(gè)元素都必須具有唯一的索引,名稱,鍵,但是您需要考慮一下。 該索引可以由字符串組成,例如一個(gè)國(guó)家中的城市,而序列中的相應(yīng)元素表示一些統(tǒng)計(jì)值,例如城市人口; 或日期,例如股票序列的交易日。

可以將數(shù)據(jù)幀視為具有公共索引的多個(gè)序列的公共長(zhǎng)度,它們?cè)趩蝹€(gè)表格對(duì)象中綁定在一起。 該對(duì)象類似于 NumPy 2D ndarray,但不是同一件事。 并非所有列都必須具有相同的數(shù)據(jù)類型。 回到城市示例,我們可以有一個(gè)包含人口的列,另一個(gè)包含該城市所在州或省的信息,還有一個(gè)包含布爾值的列,用于標(biāo)識(shí)城市是州還是省的首都,僅使用 NumPy 來(lái)完成是一個(gè)棘手的壯舉。 這些列中的每一個(gè)可能都有一個(gè)唯一的名稱,一個(gè)字符串來(lái)標(biāo)識(shí)它們包含的信息。 也許可以將其視為變量。 有了這個(gè)對(duì)象,我們可以輕松,有效地存儲(chǔ),訪問和操縱我們的數(shù)據(jù)。

在下面的筆記本中,我們將預(yù)覽可以使用序列和數(shù)據(jù)幀進(jìn)行的操作:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-yGGQOBme-1681367023174)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/1e8c0c05-3a69-4331-8685-aa11ae55feee.png)]

我們將同時(shí)加載 NumPy 和 pandas,我們將研究讀取 NumPy 和 pandas 的 CSV 文件。 實(shí)際上,我們可以在 NumPy 中加載 CSV 文件,并且它們可以具有不同類型的數(shù)據(jù),但是為了管理此類文件,您需要?jiǎng)?chuàng)建自定義dtype以類似于此類數(shù)據(jù)。 因此,這里有一個(gè) CSV 文件iris.csv,其中包含鳶尾花數(shù)據(jù)集。

現(xiàn)在,如果我們希望加載該數(shù)據(jù),則需要考慮以下事實(shí):每一行的數(shù)據(jù)不一定都是同一類型的。 特別是最后一列是針對(duì)物種的,它不是數(shù)字,而是字符串。 因此,我們需要?jiǎng)?chuàng)建一個(gè)自定義dtype,在此處執(zhí)行此操作,以調(diào)用此新的dtype模式:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-FiTJTjZ7-1681367023175)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/d449f161-4900-4564-8b7a-5e2a7bf0edf7.png)]

我們可以使用 NumPy 函數(shù)loadtxt加載此數(shù)據(jù)集,將dtype設(shè)置為schema對(duì)象,并將定界符設(shè)置為逗號(hào)以指示它是 CSV 文件。 實(shí)際上,我們可以在以下位置讀取此數(shù)據(jù)集:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-HSQQO3nT-1681367023175)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/fb5ffbd9-5c83-4152-b50c-09c72d0f5704.png)]

請(qǐng)注意,此數(shù)據(jù)集必須在您的工作目錄中。 如果我們看一下這個(gè)數(shù)據(jù)集,這將是我們注意到的:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-RjWiThxo-1681367023175)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/b2367c9c-d37f-4737-8685-8f7c8a433fd4.png)]

此輸出屏幕截圖為,僅表示,實(shí)際輸出包含更多行。 此數(shù)據(jù)集的每一行都是此一維 NumPy 數(shù)組中的新條目。 實(shí)際上,這是一個(gè) NumPy 數(shù)組:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-6w3g3K3s-1681367023175)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/7662a321-9cfa-465c-872a-90e359ee2026.png)]

我們使用以下命令選擇前五行:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-6kBHqOn9-1681367023175)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/5262fbb7-d8e0-4e99-b468-91dba378371a.png)]

我們可以選擇前五行,并指定我們只希望使用隔片長(zhǎng)度,它們是每行的第一元素:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-b6yhpac5-1681367023176)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/83e4c85b-b624-4086-9051-d2016421d13d.png)]

我們甚至可以選擇花瓣的長(zhǎng)度和種類:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-11hNJNDG-1681367023176)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/0d275bf1-2f8a-4b4f-841e-5120cf7579c4.png)]

但是有一種更好的方法可以對(duì)付 Pandas。 在 Pandas 中,我們將使用read_csv函數(shù),該函數(shù)將自動(dòng)正確解析 CSV 文件:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-RsOQoQGJ-1681367023176)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/08a48a18-eac9-4788-b8f1-5aae1022d307.png)]

查看此數(shù)據(jù)集,請(qǐng)注意,使用 Jupyter 筆記本電腦,它的顯示方式更加可讀。 實(shí)際上,這是一個(gè) pandas 數(shù)據(jù)幀:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-68ydtUg4-1681367023176)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/87068bb2-f619-4e2e-8b37-3ff5c460c85c.png)]

使用head函數(shù)可以看到前五行:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-XRwCf3sj-1681367023176)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/47f9f523-1847-4fa6-b05c-b518d001c7df.png)]

通過將其指定為好像是此數(shù)據(jù)幀的一個(gè)屬性,我們還可以看到其間隔長(zhǎng)度:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-ovzKdZoT-1681367023177)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/7da227f0-f566-4636-8681-f891a2bb2b7a.png)]

我們得到的實(shí)際上是一個(gè)序列。 我們可以選擇此數(shù)據(jù)幀的一個(gè)子集,再次返回前五行,然后選擇petal_lengthspecies列:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-VDvsUE26-1681367023177)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/abf8e8f5-aa1b-4c69-907d-cfe54d25b340.png)]

話雖如此,Pandas 的核心是建立在 NumPy 之上。 實(shí)際上,我們可以看到 pandas 用于描述其內(nèi)容的 NumPy 對(duì)象:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-bYHsyxFh-1681367023177)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c65cf239-06de-4aaf-b417-7a5b18ee2682.png)]

實(shí)際上,我們之前創(chuàng)建的 NumPy 對(duì)象可用于構(gòu)造 Pandas 數(shù)據(jù)幀:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-WbevVusz-1681367023177)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/e88f7759-0724-4736-bac7-de4ab7fb85ce.png)]

現(xiàn)在是時(shí)候仔細(xì)看一下 Pandas 序列和數(shù)據(jù)幀了。

探索序列和數(shù)據(jù)幀對(duì)象

我們將開始研究 Pandas 序列和數(shù)據(jù)幀對(duì)象。 在本節(jié)中,我們將通過研究 Pandas 序列和數(shù)據(jù)幀的創(chuàng)建方式來(lái)開始熟悉它們。 我們將從序列開始,因?yàn)樗鼈兪菙?shù)據(jù)幀的構(gòu)建塊。 序列是包含單一類型數(shù)據(jù)的一維數(shù)組狀對(duì)象。 僅憑這一事實(shí),您就可以正確地得出結(jié)論,它們與一維 NumPy 數(shù)組非常相似,但是與 NumPy 數(shù)組相比,序列具有不同的方法,這使它們更適合管理數(shù)據(jù)。 可以使用索引創(chuàng)建索引,該索引是標(biāo)識(shí)序列內(nèi)容的元數(shù)據(jù)。 序列可以處理丟失的數(shù)據(jù); 他們通過用 NumPy 的 NaN 表示丟失的數(shù)據(jù)來(lái)做到這一點(diǎn)。

創(chuàng)建序列

我們可以從類似數(shù)組的對(duì)象創(chuàng)建序列; 其中包括列表,元組和 NumPy ndarray對(duì)象。 我們還可以根據(jù) Python 字典創(chuàng)建序列。 向序列添加索引的另一種方法是通過將唯一哈希值的索引或類似數(shù)組的對(duì)象傳遞給序列的創(chuàng)建方法的index參數(shù)來(lái)創(chuàng)建索引。

我們也可以單獨(dú)創(chuàng)建索引。 創(chuàng)建索引與創(chuàng)建序列很像,但是我們要求所有值都必須唯一。 每個(gè)序列都有一個(gè)索引。 如果我們不分配索引,則將從 0 開始的簡(jiǎn)單數(shù)字序列用作索引。 我們可以通過將字符串傳遞給該序列的創(chuàng)建方法的name參數(shù)來(lái)為該序列命名。 我們這樣做是為了,如果我們要使用該序列創(chuàng)建一個(gè)數(shù)據(jù)幀,我們可以自動(dòng)為該序列分配列名或行名,這樣我們就可以知道該序列描述的日期。

換句話說(shuō),該名稱提供了有用的元數(shù)據(jù),我建議在合理范圍內(nèi)盡可能設(shè)置此參數(shù)。 讓我們看一個(gè)可行的例子。 請(qǐng)注意,我們直接將序列和數(shù)據(jù)幀對(duì)象導(dǎo)入名稱空間:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-jd9F6YqZ-1681367023177)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/b2516bf8-dccd-41be-bf29-9dbbe26a3c22.png)]

我們經(jīng)常這樣做,因?yàn)檫@些對(duì)象已被詳盡地使用。 在這里,我們創(chuàng)建兩個(gè)序列,一個(gè)由數(shù)字1,2,34組成,另一個(gè)由字母a,bc組成:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-KpM4SQgH-1681367023178)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/ecf99f93-73a1-4895-ac0f-63bda88dbc28.png)]

請(qǐng)注意,索引已自動(dòng)分配給這兩個(gè)序列。

讓我們創(chuàng)建一個(gè)索引; 該索引包含美國(guó)城市的名稱:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Uj4BAfk9-1681367023178)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/24b34554-6143-4b05-85f8-3592e934bea6.png)]

我們將創(chuàng)建一個(gè)由pops組成的新序列,并將該索引分配給我們創(chuàng)建的序列。 這些城市的人口成千上萬(wàn)。 我從維基百科獲得了這些數(shù)據(jù)。 我們還為該序列分配了名稱Population。 結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-FgAhqEUp-1681367023178)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/7d137c03-9a76-4029-a9f0-b06f8af92009.png)]

注意,我插入了一個(gè)缺失值; 這是Phoenix的人口,我們確實(shí)知道,但是我想添加一些額外的內(nèi)容來(lái)進(jìn)行演示。 我們也可以使用字典創(chuàng)建序列。 在這種情況下,字典的鍵將成為結(jié)果序列的索引,而值將是結(jié)果序列的值。 因此,在這里,我們添加state名稱:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-VkbCKLzq-1681367023178)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/0f40bfee-28c6-419a-ac7b-6f5f42b37b51.png)]

我還使用字典創(chuàng)建了一個(gè)序列,并在這些城市中填充了相應(yīng)的區(qū)域:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-7hoD8uvQ-1681367023179)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/25fd070e-296e-455d-a38c-0325591d2165.png)]

現(xiàn)在,我想提請(qǐng)您注意以下事實(shí):這些序列的長(zhǎng)度不相等,而且它們也不都包含相同的鍵。 它們并非全部或都包含相同的索引。 我們稍后將使用這些序列,因此請(qǐng)記住這一點(diǎn)。

創(chuàng)建數(shù)據(jù)幀

序列很有趣,主要是因?yàn)樗鼈冇糜跇?gòu)建 pandas 數(shù)據(jù)幀。 我們可以將 pandas 數(shù)據(jù)幀視為將序列組合在一起以形成表格對(duì)象,其中行和列為序列。 我們可以通過多種方式創(chuàng)建數(shù)據(jù)幀,我們將在此處進(jìn)行演示。 我們可以給數(shù)據(jù)幀一個(gè)索引。 我們還可以通過設(shè)置columns參數(shù)來(lái)手動(dòng)指定列名。 選擇列名遵循與選擇索引名相同的規(guī)則。

讓我們看看一些創(chuàng)建數(shù)據(jù)幀的方法。 我們要做的第一件事是創(chuàng)建數(shù)據(jù)幀,我們不會(huì)太在意它們的索引。 我們可以從 NumPy 數(shù)組創(chuàng)建一個(gè)數(shù)據(jù)幀:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-4hXkYUF7-1681367023179)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/299f7640-bffc-4ad5-b4f4-4ae28afa3667.png)]

在這里,我們有一個(gè)三維 NumPy 數(shù)組,其中填充了數(shù)字。 我們可以簡(jiǎn)單地通過將該對(duì)象作為第一個(gè)參數(shù)傳遞給數(shù)據(jù)幀創(chuàng)建函數(shù)從該對(duì)象創(chuàng)建一個(gè)數(shù)據(jù)幀:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-YASTO41Q-1681367023179)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/119801fe-cb4e-4579-9d7c-7b6e88c0b1ee.png)]

如果需要,可以向此DataFrame添加索引和列名:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-KL9phtnI-1681367023179)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/7d5fa02d-ae75-4803-adf4-c00b47e4e973.png)]

我們從元組列表創(chuàng)建數(shù)據(jù)幀:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-EhvvMMtB-1681367023179)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/18107d9f-204a-405e-b397-287510801717.png)]

我們也可以從dict創(chuàng)建數(shù)據(jù)幀:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-QiwbCS6i-1681367023180)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/aa282d53-2377-44e2-9fa3-e87784e108db.png)]

現(xiàn)在,假設(shè)我們要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)幀并將一個(gè)字典傳遞給它,但是該字典不由長(zhǎng)度相同的列表組成。 這將產(chǎn)生一個(gè)錯(cuò)誤:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-ShOyXj3r-1681367023180)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/34b2c99c-803f-4f06-8ec9-9e87c2ae3681.png)]

原因是需要將索引分配給這些值,但是函數(shù)不知道如何分配丟失的信息。 它不知道如何對(duì)齊這些列表中的數(shù)據(jù)。

但是,如果我們要傳遞一個(gè)字典(并且字典的值是不等長(zhǎng)的序列,但是這些序列具有索引),則不會(huì)產(chǎn)生錯(cuò)誤:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-1FLTl9Zu-1681367023180)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/0bb83419-123b-489f-9b80-dd70ce1e6dd2.png)]

取而代之的是,由于它知道如何排列不同序列中的元素,因此它將這樣做,并用 NaN 填充任何缺少信息的位置。

現(xiàn)在,讓我們創(chuàng)建一個(gè)包含有關(guān)序列信息的數(shù)據(jù)幀,您可能還記得這些序列的長(zhǎng)度不同。 此外,它們并非都包含相同的索引值,但是我們?nèi)匀荒軌驈乃鼈儎?chuàng)建一個(gè)數(shù)據(jù)幀:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-B9wuZhmQ-1681367023180)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/1b83c6ff-184f-45ae-a02a-24d0d4e10930.png)]

但是,在這種情況下,這不是我們想要的數(shù)據(jù)幀。 這是錯(cuò)誤的方向; 行是我們將解釋為變量的內(nèi)容,列是我們將解釋為鍵的內(nèi)容。 因此,我們可以在實(shí)際需要的方法中使用字典創(chuàng)建數(shù)據(jù)幀:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-TMjw4VQn-1681367023180)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/bd1d3af6-ccfe-4d06-9da9-c2bb9d06c40c.png)]

或者我們可以像 NumPy 數(shù)組一樣使用轉(zhuǎn)置方法T方法來(lái)使數(shù)據(jù)幀處于正確的方向:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-4pc481cw-1681367023181)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/96d001d2-c8b3-4668-8aed-7a384d1d5afe.png)]

新增數(shù)據(jù)

創(chuàng)建序列或數(shù)據(jù)幀之后,我們可以使用concat函數(shù)或append方法向其中添加更多數(shù)據(jù)。 我們將一個(gè)對(duì)象傳遞給包含將添加到現(xiàn)有對(duì)象中的數(shù)據(jù)的方法。 如果我們正在使用數(shù)據(jù)幀,則可以附加新行或新列。 我們可以使用concat函數(shù)添加新列,并使用dict,序列或數(shù)據(jù)幀進(jìn)行連接。

讓我們看看如何將新信息添加到序列或數(shù)據(jù)幀中。 例如,讓我們?cè)?code>pops序列中添加兩個(gè)新城市,分別是SeattleDenver。 結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-kN4MpF03-1681367023181)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4d9bb80b-ddac-4e0d-9db1-dc6987b9425b.png)]

請(qǐng)注意,這尚未完成。 也就是說(shuō),返回了一個(gè)新序列,而不是更改現(xiàn)有序列。 我將通過使用所需數(shù)據(jù)創(chuàng)建一個(gè)數(shù)據(jù)幀來(lái)向該數(shù)據(jù)幀添加新行:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-YblZXpco-1681367023181)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/696a8c03-b0af-4b8c-8390-98e16a8a1f34.png)]

我還可以通過有效地創(chuàng)建多個(gè)數(shù)據(jù)幀將新列添加到此數(shù)據(jù)幀。

我有一個(gè)列表,在此列表中,我有兩個(gè)數(shù)據(jù)幀。 我有df,并且我有新的數(shù)據(jù)幀包含要添加的列。 這不會(huì)更改現(xiàn)有的數(shù)據(jù)幀,而是創(chuàng)建一個(gè)全新的數(shù)據(jù)幀,然后我們需要將其分配給變量:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-BPMu0GBl-1681367023181)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/9d8d6515-f3c5-4035-964f-2da367628601.png)]

保存數(shù)據(jù)幀

假設(shè)我們有一個(gè)數(shù)據(jù)幀; 稱它為df。 我們可以輕松保存數(shù)據(jù)幀的數(shù)據(jù)。 我們可以使用to_pickle方法對(duì)數(shù)據(jù)幀進(jìn)行腌制(將其保存為 Python 常用的格式),并將文件名作為第一個(gè)參數(shù)傳遞。

我們可以使用to_csv保存 CSV 文件,使用to_json保存 JSON 文件或使用to_html保存 HTML 表。 還有許多其他格式可用; 例如,我們可以將數(shù)據(jù)保存在 Excel 電子表格,Stata,DAT 文件,HDF5 格式和 SQL 命令中,以將其插入數(shù)據(jù)庫(kù),甚至復(fù)制到剪貼板中。

稍后我們可能會(huì)討論其他方法以及如何加載不同格式的數(shù)據(jù)。

在此示例中,我將數(shù)據(jù)幀中的數(shù)據(jù)保存到 CSV 文件中:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-4bdTZ0kk-1681367023181)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/5283f0c0-1ce8-487b-a37b-1cf556a6a691.png)]

希望到目前為止,您對(duì)什么序列和數(shù)據(jù)幀更加熟悉。 接下來(lái),我們將討論在數(shù)據(jù)幀中設(shè)置數(shù)據(jù)子集,以便您可以快速輕松地獲取所需的信息。

選取數(shù)據(jù)子集

現(xiàn)在我們可以制作 Pandas 序列和數(shù)據(jù)幀,讓我們處理它們包含的數(shù)據(jù)。 在本節(jié)中,我們將看到如何獲取和處理我們存儲(chǔ)在 Pandas 序列或數(shù)據(jù)幀中的數(shù)據(jù)。 自然,這是一個(gè)重要的話題。 這些對(duì)象否則將毫無(wú)用處。

您不應(yīng)該驚訝于如何對(duì)數(shù)據(jù)幀進(jìn)行子集化有很多變體。 我們不會(huì)在這里涵蓋所有特質(zhì); 請(qǐng)參考文檔進(jìn)行詳盡的討論。 但是,我們將討論每個(gè) Pandas 用戶應(yīng)該意識(shí)到的最重要的功能。

創(chuàng)建子序列

讓我們首先看一下序列。 由于它們與數(shù)據(jù)幀相似,因此有一些適用的關(guān)鍵過程。 子集序列的最簡(jiǎn)單方法是用方括號(hào)括起來(lái),我們可以這樣做,就像我們將列表或 NumPy 數(shù)組子集化一樣。 冒號(hào)運(yùn)算符確實(shí)在這里工作,但我們還有更多工作要做。 我們可以根據(jù)序列的索引選擇元素,而不是僅根據(jù)序列中元素的位置,遵循許多相同的規(guī)則,就好像我們使用指示序列中元素位置的整數(shù)一樣。

冒號(hào)運(yùn)算符也可以正常工作,并且在很大程度上符合預(yù)期。 選擇兩個(gè)索引之間的所有元素:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-JLZPuwOI-1681367023182)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/89f8aa74-cb85-404d-a300-98786db9f47c.png)]

但是與整數(shù)位置不同,冒號(hào)運(yùn)算符確實(shí)包含端點(diǎn)。 一個(gè)特別有趣的情況是使用布爾值建立索引時(shí)。 我將展示這種用法可能看起來(lái)像什么。 這樣可以方便地獲取特定范圍內(nèi)的數(shù)據(jù)。 如果我們可以得到類似數(shù)組的對(duì)象(例如列表,NumPy 數(shù)組或其他序列)來(lái)生成布爾值,則可以將該對(duì)象用于索引。 這是一些示例代碼,展示了對(duì)索引序列的索引:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PGOIx0uJ-1681367023182)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/cacfc4fa-9a1a-44bc-ad71-14ad18d22094.png)]

到目前為止,整數(shù)索引以及布爾值索引的行為均符合預(yù)期:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-UZQXi67i-1681367023182)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/e83b3582-4a47-40ce-a080-00ee3a1a74b4.png)]

唯一真正有趣的示例是當(dāng)我們將冒號(hào)運(yùn)算符與索引一起使用時(shí); 請(qǐng)注意,所有起點(diǎn)和終點(diǎn)都包括在內(nèi),尤其是終點(diǎn)。 這與我們通常與冒號(hào)運(yùn)算符關(guān)聯(lián)的行為不同。 這是一個(gè)有趣的示例:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-XPENDqQB-1681367023182)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c6327805-7b1d-444f-a460-dbb14c237112.png)]

我們有一個(gè)序列,并且該序列具有index的整數(shù),該整數(shù)的順序不為 0 到 4。 現(xiàn)在,順序混合了。 考慮我們要求的索引。 會(huì)發(fā)生什么? 一方面,我們可以說(shuō)最后一個(gè)命令將基于索引進(jìn)行選擇。 因此它將選擇元素 2 和 4; 他們之間什么都沒有。 但另一方面,它可能會(huì)使用整數(shù)位置來(lái)選擇序列的第三和第四元素。 換句話說(shuō),當(dāng)我們從 0 開始計(jì)數(shù)時(shí),它是位置 2 和位置 3,就像您希望將srs2視為列表一樣。 哪種行為會(huì)占上風(fēng)? 還不是很清楚。

索引方法

Pandas 提供的方法可以使我們清楚地說(shuō)明我們要如何編制索引。 我們還可以區(qū)分基于序列索引值的索引和基于對(duì)象在序列中的位置的索引,就像處理列表一樣。 我們將關(guān)注的兩種方法是locilocloc專注于根據(jù)序列的索引進(jìn)行選擇,如果我們嘗試選擇不存在的關(guān)鍵元素,則會(huì)出現(xiàn)錯(cuò)誤。iloc就像我們?cè)谔幚?Python 列表一樣建立索引; 也就是說(shuō),它基于整數(shù)位置進(jìn)行索引。 因此,如果我們嘗試在iloc中使用非整數(shù)進(jìn)行索引,或者嘗試選擇有效整數(shù)范圍之外的元素,則會(huì)產(chǎn)生錯(cuò)誤。 有一種hybrid方法ix,其作用類似于loc,但是如果傳遞的輸入無(wú)法針對(duì)索引進(jìn)行解釋,則它的作用將類似于iloc。 由于ix的行為模棱兩可,因此我建議大多數(shù)時(shí)候堅(jiān)持使用lociloc。

讓我們回到我們的例子。 事實(shí)證明,在這種情況下,方括號(hào)的索引類似于iloc; 也就是說(shuō),它們基于整數(shù)位置進(jìn)行索引,就好像srs2是一個(gè)列表一樣。 如果我們想基于srs2的索引進(jìn)行索引,則可以使用loc進(jìn)行索引,以獲得其他可能的結(jié)果。 再次注意,在這種情況下,兩個(gè)端點(diǎn)都包括在內(nèi)。 這與我們通常與冒號(hào)運(yùn)算符關(guān)聯(lián)的行為不同:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Egh7lRYc-1681367023183)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/fbd66516-62ee-411e-a047-fc38a67c14c5.png)]

切片數(shù)據(jù)幀

在討論切片序列之后,讓我們談?wù)勄衅瑪?shù)據(jù)幀。 好消息是,在談?wù)撔蛄星衅瑫r(shí),許多艱苦的工作已經(jīng)完成。 我們介紹了lociloc作為連接方法,但它們也是數(shù)據(jù)幀方法。 畢竟,您應(yīng)該考慮將數(shù)據(jù)幀視為多個(gè)列粘合在一起的序列。

現(xiàn)在,我們需要考慮從序列中學(xué)到的知識(shí)如何轉(zhuǎn)換為二維設(shè)置。 如果我們使用括號(hào)表示法,它將僅適用于數(shù)據(jù)幀的列。 我們將需要使用lociloc來(lái)對(duì)數(shù)據(jù)幀的行進(jìn)行子集化。 實(shí)際上,這些方法可以接受兩個(gè)位置參數(shù)。 根據(jù)我們前面描述的規(guī)則,第一個(gè)位置參數(shù)確定要選擇的行,第二個(gè)位置參數(shù)確定要選擇的列。 可以發(fā)出第二個(gè)參數(shù)來(lái)選擇所有列,并將選擇規(guī)則僅應(yīng)用于行。 這意味著我們應(yīng)該將第一個(gè)參數(shù)作為冒號(hào),以便在我們選擇的列中更加挑剔。

lociloc將在它們的兩個(gè)參數(shù)上加上基于索引的索引或基于整數(shù)位置的索引,而ix可能允許混合使用此行為。 我不建議這樣做。 對(duì)于后來(lái)的讀者來(lái)說(shuō),結(jié)果太含糊了。 如果要混合lociloc的行為,建議使用方法鏈接。 也就是說(shuō),如果要基于索引選擇行,而要基于整數(shù)位置選擇列,請(qǐng)首先使用loc方法選擇行,然后使用iloc方法選擇列。 執(zhí)行此操作時(shí),如何選擇數(shù)據(jù)幀的元素沒有任何歧義。

如果您只想選擇一列怎么辦? 結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-n9cxiHqn-1681367023183)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/7a04ad57-6627-41aa-b93d-89bc0d95ef54.png)]

這樣做很簡(jiǎn)捷; 只需將特定的列視為數(shù)據(jù)幀的屬性,作為對(duì)象,使用點(diǎn)表示法有效地選擇它即可。 這可以很方便:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-5dAkBFbd-1681367023183)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/f049093d-84e8-473b-b2d4-765c08aa2744.png)]

請(qǐng)記住,Pandas 是從 NumPy 構(gòu)建的,在數(shù)據(jù)幀的后面是 NumPy 數(shù)組。

因此,知道了您現(xiàn)在對(duì) NumPy 數(shù)組所了解的知識(shí)后,以下事實(shí)對(duì)您來(lái)說(shuō)就不足為奇了。 將數(shù)據(jù)幀的切片操作的結(jié)果分配給變量時(shí),變量承載的不是數(shù)據(jù)的副本,而是原始數(shù)據(jù)幀中數(shù)據(jù)的視圖:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-pyC9YIMI-1681367023183)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/279074fb-d4e4-44a0-8124-01b6a2813a02.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Gddfe7E4-1681367023184)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/1884861d-d8ae-4d16-ac15-c87f0b32b6c4.png)]

如果要制作此數(shù)據(jù)的獨(dú)立副本,則需要使用數(shù)據(jù)幀的copy方法。 序列也是如此。

現(xiàn)在來(lái)看一個(gè)例子。 我們創(chuàng)建一個(gè)數(shù)據(jù)幀df,它具有有趣的索引和列名:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-6sSDOIq8-1681367023184)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/1735a032-d079-4cfb-a7f1-af13d15f6d01.png)]

通過將第一列的名稱視為df的屬性,我可以輕松地獲得一個(gè)表示第一列中數(shù)據(jù)的序列。 接下來(lái),我們看到lociloc的行為。loc根據(jù)它們的索引選擇行和列,但是iloc像選擇列表一樣選擇它們。 也就是說(shuō),它使用整數(shù)位置:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-eyXVTXBe-1681367023184)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/57648920-799d-4aa6-a581-faca79154bff.png)]

在這里,我們看到了方法鏈接。 對(duì)于輸入 10,您可能會(huì)注意到它的開始類似于上一張幻燈片中的輸入 9,但隨后我在結(jié)果視圖上調(diào)用了loc,以進(jìn)一步細(xì)分?jǐn)?shù)據(jù)。 我將此方法鏈接的結(jié)果保存在df2中。 我還用df2更改了第二列的內(nèi)容,并用新的自定義數(shù)據(jù)的序列替換了它們:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-XqcrZoYM-1681367023184)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/b2e51dc4-3b34-4a0e-b65a-714e5be57710.png)]

由于df2df的獨(dú)立副本,因此請(qǐng)注意,在創(chuàng)建df2時(shí)必須使用復(fù)制方法; 原始數(shù)據(jù)不受影響。 這使我們到達(dá)了重要的地步。序列和數(shù)據(jù)幀不是不可變的對(duì)象。 您可以更改其內(nèi)容。 這類似于更改 NumPy 數(shù)組中的內(nèi)容。 但是,在跨列進(jìn)行更改時(shí)要小心; 它們可能不是同一數(shù)據(jù)類型,從而導(dǎo)致不可預(yù)測(cè)的結(jié)果。有時(shí) :

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-BVJ7b0Ot-1681367023185)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/683559b6-4034-4715-86ab-2024b20970c5.png)]

我們?cè)谶@里看到什么分配:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-nBm9P1p2-1681367023185)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/27c5c14f-fdfb-49e4-9bd2-843ad03d966e.png)]

這種行為與您在 NumPy 中看到的行為非常相似,因此我將不做過多討論。 關(guān)于子集,還有很多要說(shuō)的,特別是當(dāng)索引實(shí)際上是MultiIndex時(shí),但這是以后使用的。

總結(jié)

在本章中,我們介紹了 Pandas 并研究了它的作用。 我們探索了 Pandas 序列數(shù)據(jù)幀并創(chuàng)建了它們。 我們還研究了如何將數(shù)據(jù)添加到序列和數(shù)據(jù)幀中。 最后,我們介紹了保存數(shù)據(jù)幀。 在下一章中,我們將討論算術(shù),函數(shù)應(yīng)用和函數(shù)映射。

五、Pandas 的算術(shù),函數(shù)應(yīng)用以及映射

我們已經(jīng)看到了使用 pandas 序列和數(shù)據(jù)幀完成的一些基本任務(wù)。 讓我們繼續(xù)進(jìn)行更有趣的應(yīng)用。 在本章中,我們將重新討論先前討論的一些主題,這些主題涉及將算術(shù)函數(shù)應(yīng)用于多元對(duì)象并處理 Pandas 中的缺失數(shù)據(jù)。

算術(shù)

讓我們來(lái)看一個(gè)例子。 我們要做的第一件事是啟動(dòng) pandas 和 NumPy。

在以下屏幕截圖中,我們有兩個(gè)序列,srs1srs2

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-6uRMyliw-1681367023185)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/1aeacb3c-603c-4ed2-9c3c-fa28e1475e16.png)]

srs1的索引從 0 到 4,而srs2的索引從 0 到 3,先跳過 4,然后再到 5。從技術(shù)上講,這兩個(gè)序列的長(zhǎng)度是相同的,但是并不意味著這些元素將按照您的預(yù)期進(jìn)行匹配。 例如,讓我們考慮以下代碼。 當(dāng)我們添加srs1srs2時(shí)會(huì)發(fā)生什么?

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-SM2chq3I-1681367023185)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/df0aba8d-49b9-405b-9348-dd6e2c3bbc92.png)]

產(chǎn)生了兩個(gè) NaN。 這是因?yàn)?,?duì)于元素 0 到 3,兩個(gè)序列中都有可以匹配的元素,但是對(duì)于 4 和 5,兩個(gè)序列中每個(gè)索引都有不等價(jià)的元素。 當(dāng)我們相乘時(shí)也是如此,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-xyAn8cMQ-1681367023186)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/448fed81-c330-4aee-8cf2-f2d721d9a7bb.png)]

或者,如果我們要求冪,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-0sdzD7Y8-1681367023186)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/867566da-a87d-4d0d-8fde-48ede04cac77.png)]

話雖這么說(shuō),布爾運(yùn)算是不同的。 在這種情況下,就像您通常期望的那樣,逐個(gè)元素進(jìn)行比較。 實(shí)際上,布爾比較似乎根本不關(guān)心索引,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-souYALNf-1681367023186)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/8e3523d4-b5c9-482e-afb8-fe0a5d9c81fb.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-iASXS1u1-1681367023186)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/a5935cbe-4cb7-4b1b-b0eb-dc4eb10bd1d7.png)]

srs2的平方根,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-OAe7n6G8-1681367023186)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/145eb41c-4d14-4148-9eaa-af0613bae742.png)]

注意,該序列的索引已保留,但我們采用了該序列元??素的平方根。 讓我們以srs1的絕對(duì)值-再次為預(yù)期結(jié)果-并注意,我們可以確認(rèn)這實(shí)際上仍然是一個(gè)序列,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-uPMBkewS-1681367023187)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/f597919b-359d-4d02-a098-442b90b23121.png)]

現(xiàn)在,讓我們應(yīng)用自定義ufunc。 在這里,我們使用裝飾器符號(hào)。 在下一個(gè)屏幕截圖中,讓我們看看使用此截?cái)嗪瘮?shù)的向量化版本,數(shù)組然后將其應(yīng)用于srs1時(shí)會(huì)發(fā)生什么,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-eFRelQPm-1681367023187)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/f5d73fed-b5c3-49b0-8a7e-4c0f187c8be6.png)]

注意srs1(以前是 Pandas 序列)已不再是序列; 現(xiàn)在是 NumPy ndarray。 因此,該序列的索引丟失了。

計(jì)算srs1的平均值:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-G3Vw7idM-1681367023187)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/35d183da-9f09-4827-819a-c0d63c267e43.png)]

或標(biāo)準(zhǔn)偏差,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-itWSOfii-1681367023187)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/b307a410-27be-41db-bad9-9e3aad4331e4.png)]

最大元素,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-VxGqPO5I-1681367023188)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/817ba0ef-aabf-4e7e-b644-ea18c778b5a5.png)]

或最大元素所在的位置,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-YdQWP3zq-1681367023188)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/7a6b49ea-ccf9-4257-8ce2-7f6fc1d706a9.png)]

或累加和,連續(xù)創(chuàng)建序列的元素:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-vcroukE1-1681367023188)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/52644228-88c6-44db-b6ce-d6b69b599d7d.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-5mY5ajWP-1681367023188)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/3fa02489-e851-43ae-8a6c-3f9d4440aca9.png)]

現(xiàn)在,讓我們談?wù)労瘮?shù)應(yīng)用和映射。 這類似于我們之前定義的截?cái)嗪瘮?shù)。 我正在使用lambda表達(dá)式創(chuàng)建一個(gè)臨時(shí)函數(shù),然后將該臨時(shí)函數(shù)應(yīng)用于srs1的每個(gè)元素,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-tON6TJTa-1681367023188)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4ab5fcba-1a5b-4fc6-92fb-f0c3d827aa87.png)]

我們可以定義一個(gè)向量化函數(shù)來(lái)執(zhí)行此操作,但是請(qǐng)注意,通過使用apply,我們?cè)O(shè)法保留了序列結(jié)構(gòu)。 讓我們創(chuàng)建一個(gè)新序列srs3,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-s2c3Gx1I-1681367023189)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/6448ba68-fdf2-4c13-9aa9-74dd95d66292.png)]

讓我們看看當(dāng)我們有了字典并將srs3映射到字典時(shí)會(huì)發(fā)生什么。 請(qǐng)注意,srs3的元素對(duì)應(yīng)于字典的鍵。 因此,當(dāng)我們映射時(shí),我最終得到的是另一個(gè)序列,并且對(duì)應(yīng)于由序列映射查找的鍵的字典對(duì)象的值如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-WJ1bpCb1-1681367023189)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/8b1383d6-61e6-469b-b2ba-9120749a47b9.png)]

這也適用于函數(shù),例如應(yīng)用方式。

數(shù)據(jù)幀的算術(shù)

數(shù)據(jù)幀之間的算術(shù)與序列或 NumPy 數(shù)組算術(shù)具有某些相似之處。 如您所料,兩個(gè)數(shù)據(jù)幀或一個(gè)數(shù)據(jù)幀與一個(gè)縮放器之間的算術(shù)工作; 但是數(shù)據(jù)幀和序列之間的算術(shù)運(yùn)算需要謹(jǐn)慎。 必須牢記的是,涉及數(shù)據(jù)幀的算法首先應(yīng)用于數(shù)據(jù)幀的列,然后再應(yīng)用于數(shù)據(jù)幀的行。 因此,數(shù)據(jù)幀中的列將與單個(gè)標(biāo)量,具有與該列同名的索引的序列元素或其他涉及的數(shù)據(jù)幀中的列匹配。 如果有序列或數(shù)據(jù)幀的元素找不到匹配項(xiàng),則會(huì)生成新列,對(duì)應(yīng)于不匹配的元素或列,并填充 Nan。

數(shù)據(jù)幀和向量化

向量化可以應(yīng)用于數(shù)據(jù)幀。 給定一個(gè)數(shù)據(jù)幀時(shí),許多 NumPy ufuncs(例如平方根或sqrt)將按預(yù)期工作; 實(shí)際上,當(dāng)給定數(shù)據(jù)幀時(shí),它們?nèi)钥赡芊祷財(cái)?shù)據(jù)幀。 也就是說(shuō),這不能保證,尤其是在使用通過vectorize創(chuàng)建的自定義ufunc時(shí)。 在這種情況下,他們可能會(huì)返回ndarray。 雖然這些方法適用于具有通用數(shù)據(jù)類型的數(shù)據(jù)幀,但是不能保證它們將適用于所有數(shù)據(jù)幀。

數(shù)據(jù)幀的函數(shù)應(yīng)用

毫不奇怪,數(shù)據(jù)幀提供了函數(shù)應(yīng)用的方法。 您應(yīng)注意兩種方法:applyapplymap。apply帶有一個(gè)函數(shù),默認(rèn)情況下,將該函數(shù)應(yīng)用于與數(shù)據(jù)幀的每一列相對(duì)應(yīng)的序列。 產(chǎn)生的內(nèi)容取決于函數(shù)的功能。 我們可以更改applyaxis參數(shù),以便將其應(yīng)用于行(即跨列),而不是應(yīng)用于列(即跨行)。applymap具有與應(yīng)用不同的目的。 鑒于apply將在每一列上求值提供的函數(shù),因此應(yīng)準(zhǔn)備接收序列,而applymap將分別在數(shù)據(jù)幀的每個(gè)元素上求值pass函數(shù)。

我們可以使用apply函數(shù)來(lái)獲取所需的數(shù)量,但是使用數(shù)據(jù)幀提供的現(xiàn)有方法通常更有用,并且也許更快。

讓我們看一些使用數(shù)據(jù)幀的演示。 與該序列一起使用的許多技巧也可以與數(shù)據(jù)幀一起使用,但有些復(fù)雜。 因此,讓我們首先創(chuàng)建一個(gè)數(shù)據(jù)幀,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PamRg4wC-1681367023189)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/e8841530-cc52-4365-84bb-3556f47f7939.png)]

這里我們從另一個(gè)數(shù)據(jù)幀中減去一個(gè)數(shù)據(jù)幀:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-8h0LIYmt-1681367023189)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/db6f0435-908f-48a7-900d-c9f8f6f31668.png)]

還有一些使用數(shù)據(jù)幀的有用方法。 例如,我們可以取每列的平均值,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-3h1aCa4m-1681367023190)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/57047275-afc2-4675-9003-3b060c5e36c1.png)]

或者我們可以找到每列的標(biāo)準(zhǔn)偏差,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-O75ZRF5O-1681367023190)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/b5e9c90a-680c-4125-a367-6c8439b80f64.png)]

另一個(gè)有用的技巧是標(biāo)準(zhǔn)化每列中的數(shù)字。 現(xiàn)在,df.meandf.std返回一個(gè)序列,所以我們實(shí)際上要做的是減去一個(gè)序列,然后除以一個(gè)序列,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-bNGgGNRc-1681367023190)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/441b9928-2a05-4868-bef2-ceda07302961.png)]

現(xiàn)在讓我們看一下向量化。 平方根函數(shù)是 NumPy 的向量化函數(shù),可在數(shù)據(jù)幀上按預(yù)期工作:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-SpLb5CMu-1681367023190)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/abd19d26-34d7-4089-813c-fc8eaf08dae6.png)]

還記得自定義ufunc trunk嗎? 它不會(huì)給我們一個(gè)數(shù)據(jù)幀,但是它將求值并返回類似于數(shù)據(jù)幀的內(nèi)容,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-dDrKzOHr-1681367023190)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c76fa618-cc00-44e4-8fd6-1fb7808165e3.png)]

但是,在混合數(shù)據(jù)類型的數(shù)據(jù)幀上運(yùn)行時(shí),這將產(chǎn)生錯(cuò)誤:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-JPG8ajA3-1681367023191)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/24b88976-04a0-4203-ad18-8c4840e60822.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-YhhilxeM-1681367023191)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/6ecdcc63-b265-4f5a-ac83-1894df73affd.png)]

這就是為什么您需要小心的原因。 現(xiàn)在,在這里,我將向您展示避免混合數(shù)據(jù)類型問題的技巧。 注意,我使用的是我以前未介紹過的方法select_dtypes。 這將是選擇具有特定dtype的列。 在這種情況下,我需要數(shù)字dtype的列:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-O7WIPd4p-1681367023191)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/1ce252a9-f718-458c-a3c7-cad5666aca4a.png)]

請(qǐng)注意,排除了由字符串?dāng)?shù)據(jù)組成的第三列。 因此,當(dāng)我取平方根時(shí),除了負(fù)數(shù)外,它都可以正常工作:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PjNEbmBe-1681367023191)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/28fbf5d6-c9e9-40e1-b003-9fc26681f2ce.png)]

現(xiàn)在,讓我們看一下函數(shù)的應(yīng)用。 在這里,我將定義一個(gè)函數(shù),該函數(shù)計(jì)算所謂的[??HTG1]幾何平均值。 因此,我要做的第一件事是定義一個(gè)幾何mean函數(shù):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-2tcWDNm1-1681367023191)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/6a665d98-3b5c-479b-a752-3b2f7c87e09c.png)]

我們將此函數(shù)應(yīng)用于數(shù)據(jù)幀的每一列:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-S7Y2eDMN-1681367023192)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4d3ab7da-ec1c-4aae-bb9f-6907c8f1759c.png)]

我展示的最后一個(gè)技巧是applymap,在該示例中,我演示了此函數(shù)如何與用于截?cái)嗪瘮?shù)的新 lambda 一起工作,這次是在3處截?cái)啵?/p>

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-wgITwUSr-1681367023192)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/13e089b1-bc2f-4fa7-8503-c0d1492ae320.png)]

接下來(lái),我們將討論解決數(shù)據(jù)幀中丟失數(shù)據(jù)的方法。

處理 Pandas 數(shù)據(jù)幀中的丟失數(shù)據(jù)

在本節(jié)中,我們將研究如何處理 Pandas 數(shù)據(jù)幀中的丟失數(shù)據(jù)。 我們有幾種方法可以檢測(cè)對(duì)序列和數(shù)據(jù)幀都有效的缺失數(shù)據(jù)。 我們可以使用 NumPy 的isnan函數(shù); 我們還可以使用序列和數(shù)據(jù)幀提供的isnullnotnull方法進(jìn)行檢測(cè)。 NaN 檢測(cè)對(duì)于處理丟失信息的自定義方法可能很有用。

在本筆記本中,我們將研究管理丟失信息的方法。 首先,我們生成一個(gè)包含缺失數(shù)據(jù)的數(shù)據(jù)幀,如以下屏幕截圖所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-qwfT6liN-1681367023192)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/71e4866d-1e34-4072-9f30-66daeba42910.png)]

如之前在 Pandas 中提到的,缺失的信息由 NumPy 的 NaN 編碼。 顯然,這不一定是到處編碼丟失的信息的方式。 例如,在某些調(diào)查中,丟失的數(shù)據(jù)由不可能的數(shù)值編碼。 假設(shè)母親的孩子人數(shù)為 999; 這顯然是不正確的。 這是使用標(biāo)記值指示缺少信息的示例。

但是在這里,我們僅使用使用 NaN 表示缺失數(shù)據(jù)的 Pandas 約定。 我們還可以創(chuàng)建一個(gè)缺少數(shù)據(jù)的序列。 下一個(gè)屏幕截圖顯示了該序列:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-xqUtMmyN-1681367023192)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/41acc8cd-2f05-4868-82ef-7f69e42a6562.png)]

讓我們看一些檢測(cè)丟失數(shù)據(jù)的方法。 這些方法將產(chǎn)生相同的結(jié)果或完全矛盾的結(jié)果。 例如,我們可以使用 NumPy 的isnan函數(shù)返回一個(gè)數(shù)據(jù)幀,如果數(shù)據(jù)為 NaN 或丟失,則返回true,否則返回false

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-5jOySMGq-1681367023192)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/637b576a-8f40-4a7f-86e1-17f3e4bd65a5.png)]

isnull方法做類似的事情; 只是它使用了數(shù)據(jù)幀方法而不是 NumPy 函數(shù),如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-vzQ7RPIk-1681367023193)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/6f31c997-41ea-4863-bbea-39fc8e9fb8a3.png)]

notnull函數(shù)基本上與isnull函數(shù)完全相反; 缺少數(shù)據(jù)時(shí)返回false,不丟失數(shù)據(jù)時(shí)返回true,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Y24JoLCt-1681367023193)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/2696fb61-724d-4539-a2ff-062ff73ea35f.png)]

刪除缺失的信息

序列和數(shù)據(jù)幀的dropna可用于創(chuàng)建對(duì)象的副本,其中刪除了丟失的信息行。 默認(rèn)情況下,它將刪除缺少任何數(shù)據(jù)的行,并且與序列一起使用時(shí),它將使用 NaN 消除元素。 如果要適當(dāng)完成此操作,請(qǐng)將inplace參數(shù)設(shè)置為true。

如果我們只想刪除僅包含缺少信息的行,因此不刪除任何使用信息,則可以將how參數(shù)設(shè)置為全部。 默認(rèn)情況下,此方法適用于行,但如果要更改其適用于列,則可以將access參數(shù)設(shè)置為 1。

這是我們剛才討論的示例。 讓我們使用此數(shù)據(jù)幀df,并刪除存在缺失數(shù)據(jù)的所有行:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-4zysMMDZ-1681367023193)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/197cde54-08db-4810-a7fc-409118152df4.png)]

注意,我們大大縮小了數(shù)據(jù)幀的大小; 只有兩行僅包含完整信息。 我們可以對(duì)該序列做類似的事情,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-IYulqa4T-1681367023193)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c7c3c7cf-7299-478e-8790-72fb39547812.png)]

有時(shí),在計(jì)算某些指標(biāo)時(shí)會(huì)忽略掉丟失的信息。 例如,在計(jì)算特定指標(biāo)(例如均值,總和,標(biāo)準(zhǔn)差等)時(shí),簡(jiǎn)單地排除丟失的信息根本沒有問題。 盡管可以更改參數(shù)來(lái)控制此行為(可能由skipna之類的參數(shù)指定),但是默認(rèn)情況下,這是由許多 pandas 方法完成的。 當(dāng)我們嘗試填充丟失的數(shù)據(jù)時(shí),此方法可能是一個(gè)很好的中間步驟。 例如,我們可以嘗試用非缺失數(shù)據(jù)的平均值填充一列中的缺失數(shù)據(jù)。

填充缺失的信息

我們可以使用fillna方法來(lái)替換序列或數(shù)據(jù)幀中丟失的信息。 我們給fillna一個(gè)對(duì)象,該對(duì)象指示該方法應(yīng)如何替換此信息。 默認(rèn)情況下,該方法創(chuàng)建一個(gè)新的數(shù)據(jù)幀或序列。 我們可以給fillna一個(gè)值,一個(gè)dict,一個(gè)序列或一個(gè)數(shù)據(jù)幀。 如果給定單個(gè)值,那么所有指示缺少信息的條目將被該值替換。dict可用于更高級(jí)的替換方案。dict的值可以對(duì)應(yīng)于數(shù)據(jù)幀的列;例如, 可以將其視為告訴如何填充每一列中的缺失信息。 如果使用序列來(lái)填充序列中的缺失信息,那么過去的序列將告訴您如何用缺失的數(shù)據(jù)填充序列中的特定條目。 類似地,當(dāng)使用數(shù)據(jù)幀填充數(shù)據(jù)幀中的丟失信息時(shí),也是如此。

如果使用序列來(lái)填充數(shù)據(jù)幀中的缺失信息,則序列索引應(yīng)對(duì)應(yīng)于數(shù)據(jù)幀的列,并且它提供用于填充該數(shù)據(jù)幀中特定列的值。

讓我們看一些填補(bǔ)缺失信息的方法。 例如,我們可以嘗試通過計(jì)算其余數(shù)據(jù)集的均值來(lái)填充缺失的信息,然后用均值填充該數(shù)據(jù)集中的缺失數(shù)據(jù)。 在下一個(gè)屏幕截圖中,我們可以看到用零填充缺失的信息,這是一種非常粗糙的方法:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-20G80am9-1681367023193)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/26a9b0fd-8645-4b49-beff-880483d95509.png)]

更好的方法是用均值填充丟失的數(shù)據(jù),如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-gwgjdBqA-1681367023194)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/b33b50a1-978b-43c7-8e95-cd4c1adbb7b0.png)]

但是請(qǐng)注意,有些事情可能并不相同。 例如,盡管新數(shù)據(jù)集的均值與丟失的信息的均值與原始數(shù)據(jù)集的均值相同,但將原始數(shù)據(jù)集的標(biāo)準(zhǔn)差與新數(shù)據(jù)集的標(biāo)準(zhǔn)差進(jìn)行比較,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-jLJ7Nwsd-1681367023194)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/156eb4f0-ac74-4705-8e3b-141e5f21ad48.png)]

標(biāo)準(zhǔn)偏差下降; 這方面沒有保留。 因此,我們可能要使用其他方法來(lái)填寫丟失的信息。 也許,嘗試這種方法的方法是通過隨機(jī)生成均值和標(biāo)準(zhǔn)差與原始數(shù)據(jù)相同的數(shù)據(jù)。 在這里,我們看到了一種類似于自舉統(tǒng)計(jì)技術(shù)的技術(shù),在該技術(shù)中,您從現(xiàn)有數(shù)據(jù)集中重新采樣以在模擬數(shù)據(jù)集中模擬其屬性。 我們首先生成一個(gè)全新的數(shù)據(jù)集,一個(gè)從原始序列中隨機(jī)選擇數(shù)字的序列,并作為缺失數(shù)據(jù)的索引,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Tfc9OdPt-1681367023194)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/91abdaf5-a983-436d-868f-c5daf34c6387.png)]

然后,該序列用于填寫原始序列的缺失數(shù)據(jù):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-EADGNfqA-1681367023194)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/faeafaf8-4b95-4352-8c2d-b332f87c1b7d.png)]

條目 5 和 7 對(duì)應(yīng)于用于填寫缺失數(shù)據(jù)的序列。 現(xiàn)在讓我們計(jì)算均值,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-OclFy599-1681367023195)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/027ca51a-884d-4dbd-a2b6-da8948177773.png)]

均值和標(biāo)準(zhǔn)差都不相同,但是至少與標(biāo)準(zhǔn)差相比,這些均值與原始均值和標(biāo)準(zhǔn)差之間的差異并不像以前那么嚴(yán)重。 現(xiàn)在,很明顯有了隨機(jī)數(shù),只有大樣本量才能保證。

讓我們看一下在數(shù)據(jù)幀中填充缺少的信息。 例如,這是以前使用的數(shù)據(jù)幀,在這里我們用 0 填寫丟失的數(shù)據(jù):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-G6Tzxj3i-1681367023195)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/b0dea539-9856-45c9-9bc8-ce4e0639d741.png)]

現(xiàn)在,您當(dāng)然會(huì)認(rèn)為數(shù)字 0 有問題,所以讓我們看一下也許用列均值填充丟失的數(shù)據(jù)。 這樣做的命令可能類似于以下內(nèi)容:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Tfv6Qsuw-1681367023195)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/56068f38-ce8f-49a7-8a36-5bf7c17debb7.png)]

但是要注意一些事情; 當(dāng)我們使用這種方法來(lái)填寫缺失的數(shù)據(jù)時(shí),標(biāo)準(zhǔn)偏差都比以前降低了!

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-jrANkTZ7-1681367023195)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/46a1feee-8b13-4107-8818-cc7aebe8d755.png)]

我們將嘗試之前嘗試過的引導(dǎo)技巧。 我們將使用字典或dict填充缺少的信息。 我們將創(chuàng)建一個(gè)dict,其中每個(gè)列均包含一個(gè)序列,而該序列在數(shù)據(jù)幀中缺少信息,這些序列將類似于我們先前生成的序列:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-qy6i7C1W-1681367023195)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c0f583f9-cdfd-4384-b0bb-8ed5b2321b68.png)]

然后,使用此字典中包含的數(shù)據(jù)填充缺少的信息:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-62ovXy4V-1681367023196)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/d6fdf0c4-422a-45b1-9930-ab0a0784a7e5.png)]

注意均值和標(biāo)準(zhǔn)偏差之間的關(guān)系:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-2LMAOuy6-1681367023196)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c90d4236-1ea9-4d4d-b221-4ad6e8ec27f9.png)]

總結(jié)

在本章中,我們介紹了 Pandas 數(shù)據(jù)幀,向量化和數(shù)據(jù)幀函數(shù)應(yīng)用的算術(shù)運(yùn)算。 我們還學(xué)習(xí)了如何通過刪除或填寫缺失的信息來(lái)處理 pandas 數(shù)據(jù)幀中的缺失數(shù)據(jù)。 在下一章中,我們將研究數(shù)據(jù)分析項(xiàng)目中的常見任務(wù),排序和繪圖。

六、排序,索引和繪圖

現(xiàn)在讓我們簡(jiǎn)要介紹一下使用 pandas 方法對(duì)數(shù)據(jù)進(jìn)行排序。 在本章中,我們將研究排序和排名。 排序是將數(shù)據(jù)按各種順序排列,而排名則是查找數(shù)據(jù)如果經(jīng)過排序?qū)⑽挥谀膫€(gè)順序中。 我們將看看如何在 Pandas 中實(shí)現(xiàn)這一目標(biāo)。 我們還將介紹 Pandas 的分層索引和繪圖。

按索引排序

在談?wù)撆判驎r(shí),我們需要考慮我們到底要排序什么。 有行,列,它們的索引以及它們包含的數(shù)據(jù)。 讓我們首先看一下索引排序。 我們可以使用sort_index方法重新排列數(shù)據(jù)幀的行,以使行索引按順序排列。 我們還可以通過將sort_index的訪問參數(shù)設(shè)置為1來(lái)對(duì)列進(jìn)行排序。 默認(rèn)情況下,排序是按升序進(jìn)行的; 后幾行的值比前幾行大,但是我們可以通過將sort_index值的升值設(shè)置為false來(lái)更改此行為。 這按降序排序。 默認(rèn)情況下,此操作未就位。 為此,您需要將sort_index的就地參數(shù)設(shè)置為true。

雖然我強(qiáng)調(diào)了對(duì)數(shù)據(jù)幀進(jìn)行排序,但是對(duì)序列進(jìn)行排序?qū)嶋H上是相同的。 讓我們來(lái)看一個(gè)例子。 加載 NumPy 和 pandas 之后,我們創(chuàng)建一個(gè)數(shù)據(jù)幀并帶有要排序的值,如以下屏幕快照所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-hosEyx7q-1681367023196)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/33d3bbe7-bd54-4ad3-a776-44859ef39984.png)]

讓我們對(duì)索引進(jìn)行排序; 請(qǐng)注意,這沒有就位:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-slJ3zbkD-1681367023197)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/37c19d95-295f-4662-9b9e-a5aafc6120f5.png)]

這次我們將列排序 ,我們將通過設(shè)置ascending=False來(lái)反向排列它們; 因此第一列現(xiàn)在是CCC,最后一列是AAA,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-dOf3hC7o-1681367023197)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/02543552-9690-4d59-a8f0-62940f0f83c7.png)]

按值排序

如果我們希望對(duì)數(shù)據(jù)幀的行或元素序列進(jìn)行排序,則需要使用sort_values方法。 對(duì)于序列,您可以致電sort_values并每天致電。 但是,對(duì)于數(shù)據(jù)幀,您需要設(shè)置by參數(shù); 您可以將by設(shè)置為一個(gè)字符串,以指示要作為排序依據(jù)的列,或者設(shè)置為字符串列表,以指示列名稱。 根據(jù)該列表的第一列,將首先進(jìn)行的排序; 然后,當(dāng)出現(xiàn)領(lǐng)帶時(shí),將根據(jù)下一列進(jìn)行排序,依此類推。

因此,讓我們演示其中一些排序技術(shù)。 我們根據(jù)AAA列對(duì)數(shù)據(jù)幀的值進(jìn)行排序,如以下屏幕截圖所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-IViOKZHm-1681367023197)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4c278caa-05d2-4442-9047-9d4936e5b7e5.png)]

請(qǐng)注意,AAA中的所有條目現(xiàn)在都是按順序排列的,盡管其他列的內(nèi)容不多。 但是我們可以使用以下命令根據(jù)BBB排序并根據(jù)CCC打破平局。 結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-j5WzUUYE-1681367023198)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4457a7af-f3ae-44d5-9d2e-7b4113ea14b1.png)]

排名告訴我們?nèi)绻匕错樞蚺帕袑⑷绾物@示。 我們可以使用rank 方法來(lái)查找序列或數(shù)據(jù)幀中元素的排名。 默認(rèn)情況下,排名是按升序進(jìn)行的; 將升序參數(shù)設(shè)置為false可更改此設(shè)置。 除非發(fā)生聯(lián)系,否則排名很簡(jiǎn)單。 在這種情況下,您將需要一種確定排名的方法。 有四種處理聯(lián)系的方法:平均值,最小值,最大值和第一種。 平均值給出平均等級(jí),最小值賦予盡可能低的等級(jí),最大值賦予盡可能最高的等級(jí),然后首先使用序列中的順序打破平局,以使它們永遠(yuǎn)不會(huì)發(fā)生。 當(dāng)在數(shù)據(jù)幀上調(diào)用時(shí),每一列都將單獨(dú)排名,結(jié)果將是一個(gè)包含等級(jí)的數(shù)據(jù)幀。 現(xiàn)在,讓我們看看這個(gè)排名。 我們要求df中條目的排名,這實(shí)際上是結(jié)果:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-crL4YaVp-1681367023198)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/1468e55d-f480-4e84-94d6-f9459e425cf1.png)]

注意,我們看到了此數(shù)據(jù)幀每個(gè)條目的排名。 現(xiàn)在,請(qǐng)注意這里有一些聯(lián)系,特別是對(duì)于列CCC的條目e和條目g。 我們使用平均值來(lái)打破平局,這是默認(rèn)設(shè)置,但是如果我們?cè)敢猓梢詫⑵湓O(shè)置為max,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-04YeTHcM-1681367023198)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/414d3e3a-a998-403b-8c50-58aabf720bda.png)]

結(jié)果,這兩個(gè)都排在第五位。 接下來(lái),我們討論分層索引。

分層索引

我們已經(jīng)走了很長(zhǎng)一段路,但是還沒有完成。 我們需要談?wù)摲謱铀饕?在本節(jié)中,我們研究層次索引,為何有用,如何創(chuàng)建索引以及如何使用它們。

那么,什么是層次結(jié)構(gòu)索引? 它們?yōu)樗饕龓?lái)了額外的結(jié)構(gòu),并以MultiIndex類對(duì)象的形式存在于 Pandas 中,但它們?nèi)匀皇强梢苑峙浣o序列或數(shù)據(jù)幀的索引。 對(duì)于分層索引,我們認(rèn)為數(shù)據(jù)幀中的行或序列中的元素由兩個(gè)或多個(gè)索引的組合唯一標(biāo)識(shí)。 這些索引具有層次結(jié)構(gòu),選擇一個(gè)級(jí)別的索引將選擇具有該級(jí)別索引的所有元素。 我們可以走更理論的道路,并聲稱當(dāng)我們有MultiIndex時(shí),表格的尺寸會(huì)增加。 它的行為不是作為存在數(shù)據(jù)的正方形,而是作為多維數(shù)據(jù)集,或者至少是可能的。

當(dāng)我們想要索引上的其他結(jié)構(gòu)而不將該結(jié)構(gòu)視為新列時(shí),將使用分層索引。 創(chuàng)建MultiIndex的一種方法是在 Pandas 中使用MultiIndex對(duì)象的初始化方法。 我們也可以在創(chuàng)建 Pandas 序列或數(shù)據(jù)幀時(shí)隱式創(chuàng)建MultiIndex,方法是將列表列表傳遞給index參數(shù),每個(gè)列表的長(zhǎng)度與該序列的長(zhǎng)度相同。 兩種方法都是可以接受的,但是在第一種情況下,我們將有一個(gè)index對(duì)象分配給序列或要?jiǎng)?chuàng)建的數(shù)據(jù)幀。 第二個(gè)是同時(shí)創(chuàng)建序列和MultiIndex。

讓我們創(chuàng)建一些層次結(jié)構(gòu)索引。 導(dǎo)入 Pandas 和 NumPy 之后,我們直接使用MultiIndex對(duì)象創(chuàng)建MultiIndex。 現(xiàn)在,這種表示法可能有點(diǎn)難以理解,因此讓我們創(chuàng)建該索引并解釋剛剛發(fā)生的情況:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-WfzcTqG2-1681367023199)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/70dbf80f-d9e4-4b0c-9b4e-f1781334acc2.png)]

在這里,我們指定索引的級(jí)別,即MultiIndex可以取的可能值。 因此,對(duì)于第一級(jí),我們有ab; 對(duì)于第二級(jí),alphabeta; 對(duì)于第三級(jí),12。 然后,我們?yōu)?code>MultiIndex的每一行分配采用這些級(jí)別中的哪個(gè)級(jí)別。 因此,此第一列表的每個(gè)零指示值a,此列表的每個(gè)零指示值b。 然后第二個(gè)列表中的alpha為零,beta為。 在第三列表中,為零,2為零。 因此,在將midx分配給序列索引后,最終得到該對(duì)象。

創(chuàng)建MultiIndex的另一種方法是直接在創(chuàng)建我們感興趣的序列時(shí)使用。這里,index參數(shù)已傳遞了多個(gè)列表,每個(gè)列表都是MulitIndex的一部分。

第一行用于MulitIndex的第一級(jí),第二行用于第二級(jí),第三行用于第三級(jí)。 這與我們?cè)谳^早的情況下所做的非常相似,但是沒有明確定義級(jí)別,然后定義該序列的每個(gè)值中的哪個(gè)級(jí)別,我們只需要輸入我們感興趣的值即可:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Ck5i4caV-1681367023199)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/dadcad3c-8f00-45d4-ba0d-91916abb6ea0.png)]

注意,這些產(chǎn)生相同的結(jié)果。

切片帶有分層索引的序列

在切片時(shí),序列的層次索引類似于 NumPy 多維數(shù)組。 例如,如果使用方括號(hào)訪問器,我們只需用逗號(hào)分隔層次結(jié)構(gòu)索引的級(jí)別,然后對(duì)每個(gè)級(jí)別進(jìn)行切片,就可以想象它們是某些高維對(duì)象各個(gè)維度的單獨(dú)索引。 這適用于loc方法和序列,但不適用于數(shù)據(jù)幀; 我們待會(huì)兒再看。 使用loc時(shí),切片索引時(shí)所有常用的技巧仍然有效,但是切片操作獲得多個(gè)結(jié)果會(huì)更容易。

因此,讓我們看一下實(shí)際操作中的MultiIndex序列。 我們要做的第一件事是切片第一層,僅選擇第一層為b的那些元素; 結(jié)果是:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-v5aA3kqf-1681367023199)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/a2f577d5-3e7b-4b0c-a69f-a920b7b281d5.png)]

然后我們將其進(jìn)一步縮小到balpha; 結(jié)果如下。 這將是該序列的alpha片段(在前面的屏幕截圖中):

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-RAjCOWk2-1681367023199)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/94bc6803-df54-4698-b805-d69926fa1629.png)]

然后我們進(jìn)一步選擇它,因此如果要選擇本序列的一個(gè)特定元素,我們必須走三個(gè)層次,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-qF1LSb7L-1681367023200)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/19405c15-5873-4d9d-ae42-c0b3a4c12b89.png)]

如果我們希望選擇序列中的每個(gè)元素,例如第一個(gè)級(jí)別為a,最后一個(gè)級(jí)別為1,則需要在中間放置一個(gè)冒號(hào),以表示我們不在乎是否有alphabeta,結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-SC6mUUYP-1681367023200)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/30953bfe-5eeb-44d6-99d3-989faddb675d.png)]

當(dāng)為數(shù)據(jù)幀提供層次結(jié)構(gòu)索引時(shí),我們?nèi)匀豢梢允褂?code>loc方法進(jìn)行索引,但是這樣做比序列更為棘手。 畢竟,我們不能用逗號(hào)分隔索引的級(jí)別,因?yàn)槲覀冇械诙S,即列。 因此,我們使用元組為切片數(shù)據(jù)幀的維度提供了說(shuō)明,并提供了指示如何進(jìn)行切片的對(duì)象。 元組的每個(gè)元素可以是數(shù)字,字符串或所需元素的列表。

使用元組時(shí),我們不能真正使用冒號(hào)表示法。 我們將需要依靠切片器。 我們?cè)谶@里看到如何復(fù)制切片器常用的一些切片符號(hào)。 我們可以將這些切片器傳遞給用于切片的元組的元素,以便我們可以執(zhí)行所需的切片操作。 如果要選擇所有列,我們?nèi)匀恍枰?code>loc中列的位置提供一個(gè)冒號(hào)。 自然,我們可以用更具體的切片方法(例如列表或單個(gè)元素)替換切片器。 現(xiàn)在,我從未談?wù)撨^如果列具有層次結(jié)構(gòu)索引會(huì)發(fā)生什么情況。 這是因?yàn)檫^程本質(zhì)上是相同的-因?yàn)榱兄皇遣煌S上的索引。

因此,現(xiàn)在讓我們看一下管理附加到數(shù)據(jù)幀的層次結(jié)構(gòu)索引。 我們要做的第一件事是創(chuàng)建帶有分層索引的數(shù)據(jù)幀。 然后,我們選擇該索引的第一級(jí)為b的所有行。 我們得到以下結(jié)果,這并不太令人震驚:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-LUoFwH1h-1681367023200)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/4b156f08-6720-43af-a387-e617b557935d.png)]

然后我們通過縮小balpha進(jìn)行重復(fù),但是請(qǐng)注意,我們現(xiàn)在必須使用元組以確保alpha不會(huì)被解釋為我們感興趣的列,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-pdM4RKN7-1681367023200)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/f74b545c-a6ea-4a41-9c60-bc62f6398d08.png)]

然后,我們進(jìn)一步縮小范圍,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-mVN2otPJ-1681367023200)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/9828715b-96c1-42d7-bf4b-356f1f0ed2e0.png)]

現(xiàn)在,讓我們嘗試復(fù)制以前做過的一些事情,但是請(qǐng)記住,我們?cè)谶@里不能再使用冒號(hào)了。 我們必須使用切片器。 因此,我們將在此處使用的切片調(diào)用與srs.loc['b', 'alpha', 1]中使用的切片調(diào)用相同。 我說(shuō)slice(None),這基本上意味著選擇第二級(jí)中的所有內(nèi)容:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-wWxSuhc7-1681367023201)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/ae2b35bb-a049-49cf-814e-c77641a998fd.png)]

如果要選擇所有列,則必須在列的位置放一個(gè)冒號(hào)。 否則將引發(fā)錯(cuò)誤。 在這里,我們將執(zhí)行等效于使用:'b'的操作,因此我們從一開始就選擇b。 結(jié)果如下:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-nljNOo2l-1681367023201)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/db82b410-e537-4c22-af0d-0715f05bc5d3.png)]

最后,我們選擇第一級(jí)中的所有內(nèi)容,然后選擇第二級(jí)中的所有內(nèi)容,但是我們僅在第三級(jí)中選擇,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-0fifpmsF-1681367023201)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/150ccf4a-ec53-4af4-91a3-f0958de9c33b.png)]

并注意,我們也一直在將索引調(diào)用傳遞給列,因?yàn)檫@是一個(gè)完全獨(dú)立的調(diào)用。 現(xiàn)在,我們繼續(xù)使用 Pandas 提供的繪圖方法。

用 Pandas 繪圖

在本節(jié)中,我們將討論 pandas 序列和數(shù)據(jù)幀提供的繪圖方法。 您將看到如何輕松快速地創(chuàng)建許多有用的圖。 Pandas 尚未提出完全屬于自己的繪圖功能。 相反,使用 pandas 方法從 pandas 對(duì)象創(chuàng)建的圖只是對(duì)稱為 Matplotlib 的繪圖庫(kù)進(jìn)行更復(fù)雜調(diào)用的包裝。 這是科學(xué) Python 社區(qū)中眾所周知的庫(kù),它是最早的繪圖系統(tǒng)之一,也許是最常用的繪圖系統(tǒng),盡管其他繪圖系統(tǒng)正在尋求替代它。

它最初是由 MATLAB 隨附的繪圖系統(tǒng)啟發(fā)的,盡管現(xiàn)在它是它自己的野獸,但不一定是最容易使用的。 Matplotlib 具有許多功能,在本課程中,我們將只涉及其繪制的表面。 在本節(jié)中,我們將討論在特定實(shí)例之外使用 Python 進(jìn)行可視化的程度,即使可視化是從初始探索到呈現(xiàn)結(jié)果的數(shù)據(jù)分析的關(guān)鍵部分。 我建議尋找其他資源以了解有關(guān)可視化的更多信息。 例如,Packt 有專門針對(duì)該主題的視頻課程。

無(wú)論如何,如果我們希望能夠使用 pandas 方法進(jìn)行繪圖,則必須安裝 Matplotlib 并可以使用。 如果您正在使用 Jupyter 筆記本或 Jupyter QtConsole 或其他基于 IPython 的環(huán)境,則建議運(yùn)行pylab魔術(shù)。

繪圖方法

關(guān)鍵的 pandas 對(duì)象,序列和數(shù)據(jù)幀提供了一種繪圖方法,簡(jiǎn)稱為plot。 它可以輕松地創(chuàng)建圖表,例如折線圖,散點(diǎn)圖,條形圖或所謂的核密度估計(jì)圖(用于了解數(shù)據(jù)的形狀) , 等等。 可以創(chuàng)建許多圖。 我們可以通過將plot中的kind參數(shù)設(shè)置為字符串來(lái)控制所需的繪圖,以指示所需的繪圖。 通常,這會(huì)產(chǎn)生一些帶有通常選擇的默認(rèn)參數(shù)的圖。 通過在plot方法中指定其他參數(shù),我們可以更好地控制最終輸出,然后將這些參數(shù)傳遞給 Matplotlib。 因此,我們可以控制諸如標(biāo)簽,繪圖樣式,x 限制,y 限制,不透明度和其他詳細(xì)信息之類的問題。

存在用于創(chuàng)建不同圖的其他方法。 例如,序列有一個(gè)稱為hist的方法來(lái)創(chuàng)建直方圖。

在本筆記本中,我將演示一些圖形。 我要做的第一件事是在pandas中加載,并且我將使用pylab魔術(shù)(帶有參數(shù)inline的 Matplotlib 魔術(shù)),以便我們可以在創(chuàng)建它們的那一刻看到繪圖:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-35mdN92M-1681367023202)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c472ddcb-ba3b-40b5-8bba-a9997d2ab6ed.png)]

現(xiàn)在,我們創(chuàng)建一個(gè)包含三個(gè)隨機(jī)游走的數(shù)據(jù)幀,這是概率論中研究和使用的一個(gè)過程。 可以通過創(chuàng)建標(biāo)準(zhǔn)的正常隨機(jī)變量,然后對(duì)其進(jìn)行累加總和來(lái)生成隨機(jī)游動(dòng),如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-hZzQmrRv-1681367023202)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/d7ae015a-e31b-4ed2-84de-43c2c61c3af8.png)]

我們使用head方法僅查看前五行。 這是了解數(shù)據(jù)集結(jié)構(gòu)的好方法。 那么,這些地塊是什么樣的? 好吧,讓我們創(chuàng)建一個(gè)可視化它們的折線圖,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-07ZwGvSA-1681367023202)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/77895404-17e4-46e0-ad77-5aeb36b9051e.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-uRiCGqE9-1681367023202)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c4314631-cb23-4d2c-bf5a-18c81da12168.png)]

這些只是上下隨機(jī)運(yùn)動(dòng)。 請(qǐng)注意,plot方法會(huì)自動(dòng)生成一個(gè)鍵和一個(gè)圖例,并為不同的線分配顏色,這些線與我們要繪制的數(shù)據(jù)幀的列相對(duì)應(yīng)。 讓我們看一下該序列的圖,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-NiG9odyA-1681367023203)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/a9f2ddad-23fa-4e90-a86d-bda81a76c508.png)]

它有些先進(jìn),但是您可以看到,我們?nèi)匀豢梢允褂眯蛄袆?chuàng)建這些圖。

讓我們指定一個(gè)參數(shù)ylim,以使該序列中繪圖的比例與該數(shù)據(jù)幀的繪圖的比例相同,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-6OKUFi56-1681367023203)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/557c70de-1db8-4e6f-9a9b-0bf5cd2d3d48.png)]

現(xiàn)在讓我們看一些不同的繪圖。 在下一個(gè)屏幕截圖中,讓我們看一下該序列中值的直方圖:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-rbfsirUD-1681367023203)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/2e7285e5-5f0b-44f3-801a-f7d89021ab49.png)]

直方圖是確定數(shù)據(jù)集形狀的有用方法。 在這里,我們看到一個(gè)大致對(duì)稱的鐘形曲線形狀。

我們還可以使用plot方法創(chuàng)建直方圖,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Jvxu3O3b-1681367023203)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/8d05d1b8-215e-40ef-8050-efe87687da73.png)]

核密度估計(jì)器實(shí)際上是平滑的直方圖。 使用直方圖,您可以創(chuàng)建箱并計(jì)算數(shù)據(jù)集中有多少觀測(cè)值落入這些箱中。 核密度估計(jì)器使用另一種方式來(lái)創(chuàng)建圖,但是最終得到的是一條平滑曲線,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Lz6hmweQ-1681367023204)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/da87e71f-7e74-4658-abde-d8c4dd7110ce.png)]

讓我們看看其他繪圖。 例如,我們?yōu)閿?shù)據(jù)幀創(chuàng)建箱形圖:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-BLyra0MJ-1681367023204)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/1f90164f-7d97-47e4-bea8-fa819a6a01ee.png)]

我們還可以創(chuàng)建散點(diǎn)圖,并且在創(chuàng)建散點(diǎn)圖時(shí),我們需要指定哪一列對(duì)應(yīng)x值,哪一列對(duì)應(yīng)y值:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-MpH06857-1681367023204)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/d4dc7567-67a6-4a3f-a283-fcb60f4dce26.png)]

這里有很多數(shù)據(jù)點(diǎn)。 另一種方法是使用所謂的十六進(jìn)制箱圖,您可以將其視為 2D 直方圖。 它計(jì)算落入真實(shí)平面上某些六角形面元的觀測(cè)值,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-I8yAgOxM-1681367023205)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/7b623069-150a-4a5f-aefc-41e7e726ee86.png)]

現(xiàn)在,這個(gè)十六進(jìn)制圖似乎不是很有用,所以讓我們將網(wǎng)格大小設(shè)置為25

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-P20Dax7c-1681367023205)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c4554dd2-424d-4d7e-b872-7135a68479a7.png)]

現(xiàn)在,我們有了一個(gè)更有趣的圖,并且可以看到數(shù)據(jù)傾向于聚集的位置。 讓我們計(jì)算圖中各列的標(biāo)準(zhǔn)偏差,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-DCbziFNt-1681367023205)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/e01dfd05-11fa-4379-8b97-be946ca88415.png)]

現(xiàn)在,讓我們創(chuàng)建一個(gè)條形圖以可視化這些標(biāo)準(zhǔn)偏差,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-LP3XLzQM-1681367023205)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/c00d3910-730c-4007-a5da-edbeae50378c.png)]

現(xiàn)在,讓我們看一個(gè)稱為散點(diǎn)圖矩陣的高級(jí)工具,該工具可用于可視化數(shù)據(jù)集中的多個(gè)關(guān)系,如下所示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-OlaACjiP-1681367023205)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/1668870c-31d7-4572-96f0-d215f0b89511.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-dioMQEth-1681367023206)(https://gitcode.net/apachecn/apachecn-ds-zh/-/raw/master/docs/handson-data-analysis-numpy-pandas/img/7b6b1466-4a6a-4675-b673-6cc68cb69643.png)]

您可以創(chuàng)建更多圖。 我誠(chéng)摯地邀請(qǐng)您探索繪圖方法,不僅是 Pandas 的繪圖方法(我提供了許多示例的文檔鏈接),而且還探討了 Matplotlib。

總結(jié)

在本章中,我們從索引排序開始,并介紹了如何通過值進(jìn)行排序。 我們介紹了層次聚類,并用層次索引對(duì)序列進(jìn)行了切片。 最后,我們看到了各種繪圖方法并進(jìn)行了演示。

我們已經(jīng)走了很長(zhǎng)一段路。 我們已經(jīng)建立了 Python 數(shù)據(jù)分析環(huán)境,并熟悉了基本工具。 祝一切順利!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-413018.html

到了這里,關(guān)于NumPy 和 Pandas 數(shù)據(jù)分析實(shí)用指南:1~6 全的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python數(shù)據(jù)分析:NumPy、Pandas和Matplotlib的使用和實(shí)踐

    Python數(shù)據(jù)分析:NumPy、Pandas和Matplotlib的使用和實(shí)踐

    在現(xiàn)代數(shù)據(jù)分析領(lǐng)域中,Python已成為最受歡迎的編程語(yǔ)言之一。Python通過龐大的社區(qū)和出色的庫(kù)支持,成為了數(shù)據(jù)科學(xué)家和分析師的首選語(yǔ)言。在Python的庫(kù)中,NumPy、Pandas和Matplotlib是三個(gè)最為重要的庫(kù),它們分別用于處理數(shù)值數(shù)組、數(shù)據(jù)處理和可視化。本文將介紹這三個(gè)庫(kù)的

    2024年02月04日
    瀏覽(31)
  • NumPy和Pandas庫(kù)的基本用法,用于數(shù)據(jù)處理和分析

    當(dāng)涉及到數(shù)據(jù)處理和分析時(shí),NumPy和Pandas是兩個(gè)非常常用的Python庫(kù)。下面是它們的基本用法: NumPy(Numerical Python): 導(dǎo)入NumPy庫(kù):在代碼中使用import numpy as np導(dǎo)入NumPy庫(kù)。 創(chuàng)建NumPy數(shù)組:使用np.array()函數(shù)可以創(chuàng)建一個(gè)NumPy數(shù)組。例如,arr = np.array([1, 2, 3, 4, 5])創(chuàng)建一個(gè)包含整數(shù)

    2024年02月11日
    瀏覽(39)
  • 郭煒老師mooc第十一章數(shù)據(jù)分析和展示(numpy,pandas, matplotlib)

    郭煒老師mooc第十一章數(shù)據(jù)分析和展示(numpy,pandas, matplotlib)

    numpy創(chuàng)建數(shù)組的常用函數(shù) ?numpy數(shù)組常用屬性和函數(shù) ?numpy數(shù)組元素的增刪 在numpy數(shù)組中查找元素? np.argwhere( a ):返回非0的數(shù)組元組的索引,其中a是要索引數(shù)組的條件。 np.where(condition) 當(dāng)where內(nèi)只有一個(gè)參數(shù)時(shí),那個(gè)參數(shù)表示條件,當(dāng)條件成立時(shí),? ? ? ? ?? where返回的是每個(gè)

    2024年03月15日
    瀏覽(23)
  • Python 數(shù)據(jù)分析入門教程:Numpy、Pandas、Matplotlib和Scikit-Learn詳解

    NumPy是一個(gè)Python的科學(xué)計(jì)算基礎(chǔ)模塊,提供了多維數(shù)組和矩陣操作功能。 NumPy中的數(shù)組比Python自帶的列表更適合進(jìn)行數(shù)值計(jì)算和數(shù)據(jù)分析。 Pandas建立在NumPy之上,提供了更高級(jí)的數(shù)據(jù)分析功能。 Pandas中的DataFrame可以看成是一個(gè)二維表格,便于加載和分析數(shù)據(jù)。 Matplotlib可以用來(lái)繪

    2024年02月07日
    瀏覽(59)
  • 使用Pandas進(jìn)行數(shù)據(jù)處理和分析的入門指南

    摘要:本文將介紹如何使用Python的Pandas庫(kù)進(jìn)行數(shù)據(jù)處理和分析,包括數(shù)據(jù)導(dǎo)入、數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換和簡(jiǎn)單分析等方面的內(nèi)容。 在數(shù)據(jù)科學(xué)和數(shù)據(jù)分析領(lǐng)域,數(shù)據(jù)處理是一個(gè)關(guān)鍵的步驟。Python的Pandas庫(kù)提供了強(qiáng)大且易于使用的工具,使數(shù)據(jù)處理變得簡(jiǎn)單和高效。本文將引導(dǎo)您

    2024年02月10日
    瀏覽(24)
  • 數(shù)據(jù)分析進(jìn)階,Databricks集成GitHub Copilot實(shí)用指南

    數(shù)據(jù)分析進(jìn)階,Databricks集成GitHub Copilot實(shí)用指南

    在Databricks中集成AI驅(qū)動(dòng)的數(shù)據(jù)分析代碼編寫工具GitHub Copilot,可以優(yōu)化和簡(jiǎn)化開發(fā)過程。 微信搜索關(guān)注《Python學(xué)研大本營(yíng)》,加入讀者群,分享更多精彩 GitHub Copilot是由GitHub與OpenAI合作開發(fā)的人工智能驅(qū)動(dòng)的代碼補(bǔ)全助手,它采用了ChatGPT模型,旨在幫助開發(fā)人員加速編碼過程

    2024年02月02日
    瀏覽(35)
  • 數(shù)據(jù)科學(xué)中的Python:NumPy和Pandas入門指南【第121篇—NumPy和Pandas】

    數(shù)據(jù)科學(xué)中的Python:NumPy和Pandas入門指南【第121篇—NumPy和Pandas】

    數(shù)據(jù)科學(xué)是當(dāng)今數(shù)字時(shí)代中的一個(gè)重要領(lǐng)域,而Python是數(shù)據(jù)科學(xué)家們最喜愛的編程語(yǔ)言之一。在這篇博客中,我們將介紹Python中兩個(gè)強(qiáng)大的庫(kù)——NumPy和Pandas,它們?cè)跀?shù)據(jù)處理和分析中發(fā)揮著重要作用。 NumPy是用于科學(xué)計(jì)算的基礎(chǔ)包,提供了高性能的多維數(shù)組對(duì)象( numpy.nda

    2024年03月15日
    瀏覽(21)
  • 【Python數(shù)據(jù)分析】數(shù)據(jù)分析之numpy基礎(chǔ)

    【Python數(shù)據(jù)分析】數(shù)據(jù)分析之numpy基礎(chǔ)

    實(shí)驗(yàn)環(huán)境:建立在Python3的基礎(chǔ)之上 numpy提供了一種數(shù)據(jù)類型,提供了數(shù)據(jù)分析的運(yùn)算基礎(chǔ),安裝方式 導(dǎo)入numpy到python項(xiàng)目 本文以案例的方式展示numpy的基本語(yǔ)法,沒有介紹語(yǔ)法的細(xì)枝末節(jié),筆者認(rèn)為通過查閱案例就能掌握基本用法。 numpy數(shù)組的基本概念 numpy默認(rèn)所有元素具有

    2024年02月10日
    瀏覽(27)
  • 【數(shù)據(jù)分析之道-NumPy(四)】numpy廣播機(jī)制

    【數(shù)據(jù)分析之道-NumPy(四)】numpy廣播機(jī)制

    ? 作者簡(jiǎn)介: i阿極 ,CSDN Python領(lǐng)域新星創(chuàng)作者, 專注于分享python領(lǐng)域知識(shí)。 ? 本文錄入于《數(shù)據(jù)分析之道》 ,本專欄針對(duì)大學(xué)生、初級(jí)數(shù)據(jù)分析工程師精心打造,對(duì)python基礎(chǔ)知識(shí)點(diǎn)逐一擊破,不斷學(xué)習(xí),提升自我。 ? 訂閱后,可以閱讀《數(shù)據(jù)分析之道》中全部文章內(nèi)容

    2023年04月19日
    瀏覽(29)
  • 【數(shù)據(jù)分析之道-Numpy(八)】numpy統(tǒng)計(jì)函數(shù)

    【數(shù)據(jù)分析之道-Numpy(八)】numpy統(tǒng)計(jì)函數(shù)

    ? 作者簡(jiǎn)介: i阿極 ,CSDN Python領(lǐng)域新星創(chuàng)作者, 專注于分享python領(lǐng)域知識(shí)。 ? 本文錄入于《數(shù)據(jù)分析之道》 ,本專欄針對(duì)大學(xué)生、初級(jí)數(shù)據(jù)分析工程師精心打造,對(duì)python基礎(chǔ)知識(shí)點(diǎn)逐一擊破,不斷學(xué)習(xí),提升自我。 ? 訂閱后,可以閱讀《數(shù)據(jù)分析之道》中全部文章內(nèi)容

    2024年02月06日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包