大熊貓是全竹宴美食家中的饕餮,亦是十足的瞌睡蟲。不過它們還身懷一項隱秘技能:(不遺余力吞噬下)大量的數(shù)據(jù)。今天將要介紹的就是數(shù)據(jù)處理中最強有力也最流行的工具之一:Pandas!
當人們談到數(shù)據(jù)科學,往往不會立即想到 Pandas。這些黑白相間憨態(tài)可掬的大熊貓總是把時間消耗在吃和睡上面,而不是鉆研數(shù)據(jù)相關(guān)的研究。但今天我們就是要用 Pandas 對付候選數(shù)據(jù)集,然后準備好下一步用于機器學習。我沒法在一期視頻中介紹整個 Pandas 庫,但是所幸我能在這期概述中給你一些幫助,讓你能自行去深入探索 Pandas 的世界。
我吃我吃我吃吃吃!數(shù)據(jù)集就是我的竹子,別和我搶!
Pandas 是一個低學習成本高性能的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具。拋開大熊貓憨態(tài)可掬的樣子不說,「Pandas」這個名字來源于術(shù)語「panel data」,指的是統(tǒng)計和計量經(jīng)濟學上的多維數(shù)據(jù)。
要安裝 Pandas,只需在 Python 環(huán)境中執(zhí)行 pip install pandas 命令就可以了。之后只需要在代碼中引入 Pandas:import pandas as pd。
人們用 Pandas 時往往都會用到 pd.read_csv 來讀入 CSV 文件中的數(shù)據(jù)。這也常常是人們使用時落筆的第一點墨。
pd.read_csv 會將數(shù)據(jù)載入一個 DataFrame 中。它本質(zhì)上是一張電子表格或是數(shù)據(jù)表。我們可以通過在 DataFrame 調(diào)用 head() 來粗略察看數(shù)據(jù)集中的概況。
DataFrames 中有一行一行數(shù)據(jù),這些數(shù)據(jù)的列首都是經(jīng)過命名的,這些命名后的列又被稱為「序列」。
我最喜歡的 DataFrames 的一些特性當中,有一個函數(shù)叫做 describe(),這個函數(shù)會羅列出你的 DataFrame 的一些相關(guān)數(shù)據(jù)。這個函數(shù)有助于你檢查數(shù)據(jù)集,思考其中的數(shù)據(jù)分布是否合理,也可以檢驗是否各項屬性都符合預期。
有時候我會用 Pandas 來擾亂數(shù)據(jù)。有時候你想要打亂所有數(shù)據(jù),而不是僅僅釋出數(shù)據(jù)時取用首部那一點點數(shù)據(jù),那么這時 Pandas 就很有用了。比如,假使你的數(shù)據(jù)處于完全有序的狀態(tài),沒有絲毫混亂,此時你可能就需要進行一些額外的混合、擾亂操作了。
然而,對于那些無法放進內(nèi)存里的大型數(shù)據(jù)集,這么做實在不太明智。也許應該試試更高明點的法子來處理。
處理列
要處理數(shù)據(jù)集中單獨的某一列,只需使用括號來標注出那一列,將該列的名字作為參數(shù)傳入即可。如果你不清楚有哪些具體的列名稱,那么可以回過頭看看 .describe() 輸出的內(nèi)容或者用 .columns 以數(shù)組形式輸出 DataFrame 中所有的列名稱。
處理行
處理行的方法與處理列不盡相同。比如,如果我們要想得到某個 DataFrame 中索引為 i 的行,需要使用 .iloc[i] 得到該行數(shù)據(jù)。
索引為 5,表示這是第 6 行
記住 Pandas 是以 0 作為索引起點的,所以數(shù)據(jù)中的第一行對應著索引 0。
同時處理行和列
有時你會想要得到某一指定的行、列的數(shù)據(jù)。由于行列的訪問方式不同,我們需要結(jié)合上面講到的兩種方式:
當然,你也可以交換兩者的訪問順序,比如 csv_data.iloc[5][‘sepal_len’]。不過,相較之下我覺得這樣一來可讀性就變差了。
某個行/列范圍
真正有意思的是當你要處理某個行列范圍內(nèi)數(shù)據(jù)的時候。
對于列,一個列范圍只需要用一個列名稱的數(shù)組來指定。
如果要挨著輸入的列名字太多太復雜,那么可以直接使用 csv_data.columns 得到列名稱數(shù)組后,取數(shù)組中某個范圍作為列索引的值即可。
本來這兩列我可以直接輸入進去的,不過你明白我的意思就好
如果要得到某個范圍內(nèi)的行怎么辦?我們用冒號作為 .iloc 之后的括號內(nèi)中的分隔符來表達即可。
起始索引已經(jīng)被包括在內(nèi)了,而終止索引卻被忽略了。注意,返回的是索引為 5、6、7、8、9 的行,而不包含索引為 10 的行。
混合行、列范圍選擇
我們想要的是行的一個子集和列的一個子集,該怎么做?我們把上面談到的各類方法結(jié)合起來:
首先,得到所需的列名數(shù)組:
cols_2_4 = csv_data.column[2:4]
然后是所有所需的列:
df_cols_2_4 = df[cols_2_4]
選擇這些列中的指定行:
df_cols_2_4.iloc[5:10]
如果你非常熟練了,完全可以把上面三步結(jié)合成一步:
csv_data[csv_data.columns[2:4]].iloc[5:10]
我希望你能先暫停視頻回頭想想這個表達式的等價形式。我不會走開,一直在這兒等你。
小結(jié)幾句
Pandas 中的鏈式操作不僅會讓數(shù)據(jù)處理更快,同時當你熟練之后,代碼可讀性也會顯著提高。
我們已經(jīng)看過一些 DataFrame 的處理了,但是 Pandas 所衍生的一整套工具卻遠遠不止這些。從高效的 PyTables 和 HDF5 式文件存儲到進行統(tǒng)計學分析,處處遍布 Pandas 的身影。
稍后就試著去用一下 Pandas 吧,定會讓你滿意!
-
機器學習
+關(guān)注
關(guān)注
66文章
8423瀏覽量
132744 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84786 -
數(shù)據(jù)科學
+關(guān)注
關(guān)注
0文章
165瀏覽量
10075
原文標題:AIA 系列 | 難以置信,大熊貓還能吃數(shù)據(jù)?
文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論