前段時間我說過我會寫一些關(guān)于 Pandas 的文章,,但是我卻一直沒有跟進(jìn)。然而,,本周兩位同事向我表達(dá)了他們對于Pandas的學(xué)習(xí)興趣,,因此我打算重新討論這個話題。因為我覺得這是一個龐大的任務(wù),,所以下面我將分成三個部分來全面地介紹Pandas庫:Part 2: DataFrames的使用方法,,該部分主要介紹如何使用 DataFrames 的篩選,、過濾、合并,、聯(lián)合以及分組功能,。 如果你想跟著文章的內(nèi)容運行相應(yīng)代碼的話,,你可以在這里下載到相關(guān) CSV 數(shù)據(jù)和 MovieLens數(shù)據(jù),。(https://github.com/gjreda//tree/master/content/notebooks/data)本篇文章的目的在于通過比較 Pandas與 SQL 之間的差異來介紹該庫的基本用法,。由于我的同事都非常熟悉 SQL 的語法,,所以我覺得這是一個易于被讀者所理解的寫作方法,。如果你想要學(xué)習(xí)更多的 Pandas 知識,,你可以閱讀 Pandas作者撰寫的書籍《Python for Data Analysis》,。Pandas是 Python中用于分析數(shù)據(jù)的常用開源庫,。Python 可以很好地預(yù)處理和加工數(shù)據(jù),,但是它無法很好地進(jìn)行數(shù)據(jù)分析——通常情況下你會利用 R 或者 SQL 來分析數(shù)據(jù),。有了 Pandas之后,,我們可以利用 Python 快速地進(jìn)行數(shù)據(jù)分析。Pandas中引入了兩種新的數(shù)據(jù)結(jié)構(gòu)——Series和DataFrame,,這兩種數(shù)據(jù)結(jié)構(gòu)都建立在NumPy的基礎(chǔ)之上,。Series是指一個類似于數(shù)組、列表或列變量的一維對象,,Series中每個條目都會被分配一個標(biāo)簽索引,。默認(rèn)情況下,每個條目都會收到一個從0到N之間的索引標(biāo)簽,,其中N等于Series的長度減一,。Series可以直接轉(zhuǎn)換詞典格式的數(shù)據(jù),其中詞典的鍵值對應(yīng)Series中的索引值,。你可以利用索引從Series中提取出特定的條目,。或者你也可以利用布爾索引值來選取數(shù)據(jù),。第二種方法可能看起來有點奇怪,所以讓我們更清楚地了解下它的邏輯——cities <>如果你不確定Series中是否存在某個條目,,你可以利用 Python 代碼來檢測。我們還可以對Series進(jìn)行數(shù)學(xué)運算和函數(shù)運算,。此外你還可以匯總兩個Series,,這會返回兩個Series的并集,其中沒有共同索引的條目將會返回 NULL/NaN,。由于兩個Series中沒有同時包含Austin,,Chicago和Portland,因此它們的返回值是 NULL/NaN,。我們可以利用 isnull 和 notnull 函數(shù)來檢測 NULL 值,。DataFrame是一種由列向量和行向量組成的數(shù)據(jù)結(jié)構(gòu),它類似于電子數(shù)據(jù)表,、數(shù)據(jù)庫表格和 R 語言中的 data.frame對象,。你也可以理解成DataFrame是由多個共享索引值的Series對象構(gòu)成的。本文的剩下篇幅中,,我將主要介紹DataFrame的內(nèi)容,。我們可以將 Python 中常用的數(shù)據(jù)結(jié)構(gòu)(如詞典列表)轉(zhuǎn)換成DataFrame,其中通過控制columns的參數(shù)值可以調(diào)整變量的順序,。默認(rèn)情況下,,DataFrame會按字母順序?qū)ψ兞窟M(jìn)行排序。更多情況下,,我們需要將數(shù)據(jù)集讀到DataFrame中,,接下來我們將介紹幾種常用的讀取數(shù)據(jù)的方法。我們可以利用read.csv函數(shù)來讀取 CSV 文件,,其中read.csv函數(shù)默認(rèn)CSV數(shù)據(jù)集是以逗號分隔的,,你可以通過 sep 參數(shù)來控制分隔符的類別。該函數(shù)默認(rèn)將文件中的第一行設(shè)定為列變量的標(biāo)題,,我們還可以設(shè)定 header=None 來手動設(shè)定列標(biāo)題,。Pandas的reader系列函數(shù)中有許多可控參數(shù),用于控制讀取數(shù)據(jù)時的其他設(shè)定,。大家可以參閱IO文檔來熟悉文件讀取/寫入功能,。(http://pandas./pandas-docs/stable/io.html)
你們討厭VBA嗎?我非常討厭它,,我相信你也會討厭它的,。幸運的是,pandas允許我們讀寫 Excel 文件,所以我們可以利用Python處理完數(shù)據(jù)后再導(dǎo)出Excel文件,,這樣可以規(guī)避使用煩人的VBA來處理數(shù)據(jù),。讀取Excel文件需要安裝xlrd庫,我們可以利用pip工具來安裝它(pip install xlrd),。Database Pandas還可以直接從數(shù)據(jù)庫中讀寫DataFrame文件,你只需要利用pandas.io模塊中的read_sql或to_sql函數(shù)來創(chuàng)建一個連接數(shù)據(jù)庫的對象即可,。
需要注意的是,,to_sql直接調(diào)用INSERT INTO語句,因此數(shù)據(jù)的傳輸速度比較慢,。如果你想將一個大型DataFrame寫入數(shù)據(jù)庫中,,最好先導(dǎo)出CSV文件然后再導(dǎo)入數(shù)據(jù)庫中。
Clipboard 相比于直接將查詢結(jié)果插入DataFrame中,,我更傾向于從剪貼板中讀取數(shù)據(jù),。Python可以很好地處理剪貼板中的分隔符數(shù)據(jù),你可以控制sep參數(shù)來設(shè)定數(shù)據(jù)分隔符,。
此外,,我們還可以利用read_table函數(shù)直接從 URL 鏈接中讀取數(shù)據(jù)。
Pandas還整合了 Google Analytics 的API接口,,但是需要進(jìn)行一些設(shè)置,。本文沒有介紹這些內(nèi)容,你可以參閱文章1(http://blog./posts/pandas-google-analytics.html)和文章2(https://quantabee./2012/12/17/google-analytics-pandas/),。 原文鏈接:http:///2013/10/26/intro-to-pandas-data-structures/
|