Pandas 使用教程 1
Pandas 使用教程--Pandas 安裝與資料結構
一、實驗介紹
1.1 實驗內容
Pandas 是非常著名的開源資料處理庫,我們可以通過它完成對資料集進行快速讀取、轉換、過濾、分析等一系列操作。除此之外,Pandas 擁有強大的缺失資料處理與資料透視功能,可謂是資料預處理中的必備利器。這是 Pandas 使用教程的第 1 章節,將學會安裝它,並瞭解 Pandas 的資料結構。
1.2 實驗知識點
- Pandas 安裝
- Pandas 資料結構
1.3 實驗環境
- python2.7
- Xfce 終端
- ipython 終端
1.4 適合人群
本課程難度為一般,屬於初級級別課程,適合具有 Python 基礎,並對使用 Pandas 進行資料處理感興趣的使用者。
1.5 官方文件
學習本課程之前,你可以先自行下載官方文件(英文)作為輔助學習資料。
http://pandas.pydata.org/pandas-docs/stable/pandas.pdf
二、Pandas 安裝
Pandas 目前支援 Python 2.7, 3.4, 3.5, 和 3.6 版本。最簡單的安裝方式是通過 pip 完成。你可以開啟終端,鍵入以下命令。
sudo pip install pandas
安裝過程大約持續 1 分鐘作用,系統會自動下載 numpy 等依賴包。注意,本課程的全部內容基於 Pandas 0.20.3 版本,如果和你當前學習的版本存在不相容,請通過以下命令安裝 0.20.3 版本。
sudo pip install -v pandas==0.20.3
在正式學習使用 Pandas 進行資料預處理之前,我們先來了解 Pandas 的資料結構。Pandas 大致擁有 3 類資料結構,分別是一維資料 Series、二維資料 DataFrame、以及三維資料 Panel(目前依舊被融入 MultiIndex DataFrame 多維資料)。
下面的內容均在 iPython 互動式終端中演示,你可以通過線上環境左下角的應用程式選單 > 附件開啟。如果你在本地進行練習,推薦使用 Jupyter Notebook 環境。
三、 一維資料 Series
Series 是 Pandas 中最基本的 1 維資料形式。其可以儲存整數、浮點數、字串等形式的資料。Series 的新建方法如下:
s = pandas.Series(data, index=index)
其中,data 可以是字典、numpy 裡的 ndarray 物件等。index 是資料索引,索引是 pandas 資料結構中的一大特性,它主要的功能是幫助我們更快速地定位資料,這一點後面會談到。
3.1 字典 -> Series
下面,我們將把不同型別的資料轉換為為 Series。首先是字典型別。
import pandas as pdd = {'a' : 10, 'b' : 20, 'c' : 30}print pd.Series(d)
這裡,資料值是 10, 20, 30,索引為 a, b, c 。我們可以直接通過 index= 引數來設定新的索引。
import pandas as pdd = {'a' : 10, 'b' : 20, 'c' : 30}s = pd.Series(d, index=['b', 'c', 'd', 'a'])print s
你會發現,pandas 會自動匹配人為設定的索引值和字典轉換過來的索引值。而當索引無對應值時,會顯示為 NaN 缺失值。
3.2 ndarray -> Series
ndarray 是著名數值計算包 numpy 中的多維陣列。我們也可以將 ndarray 直接轉換為 Series。
import pandas as pdimport numpy as npdata = np.random.randn(5) # 一維隨機數index = ['a', 'b', 'c', 'd', 'e'] # 指定索引s = pd.Series(data, index)print s
上面的兩個例子中,我們都指定了 index 的值。而當我們非人為指定索引值時,Pandas 會預設從 0 開始設定索引值。
s = pd.Series(data)print s
當我們需要從一維資料 Series 中返回某一個值時,可以直接通過索引完成。
import pandas as pdimport numpy as npdata = np.random.randn(5) # 一維隨機數index = ['a', 'b', 'c', 'd', 'e'] # 指定索引s = pd.Series(data, index)print sprint s['a']
除此之外,Series 是可以直接進行運算的。例如:
import pandas as pdimport numpy as npdata = np.random.randn(5) # 一維隨機數index = ['a', 'b', 'c', 'd', 'e'] # 指定索引s = pd.Series(data, index)print sprint 2*sprint s-s
四、二維資料 DataFrame
DataFrame 是 Pandas 中最為常見、最重要且使用頻率最高的資料結構。你可以想到它箱型為電子表格或 SQL 表具有的結構。DataFrame 可以被看成是以 Series 組成的字典。它和 Series 的區別在於,不但具有行索引,且具有列索引。
DataFrame 可以用於儲存多種型別的輸入:
- 一維陣列、列表、字典或者 Series 字典。
- 二維 numpy.ndarray。
- 結構化的 ndarray。
- 一個 Series。
- 另一個 DataFrame。
4.1 Series 字典 -> DataFrame
import pandas as pd# 帶 Series 的字典d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}df = pd.DataFrame(d) # 新建 DataFrameprint df
我們可以看到,這裡的行索引為 a, b, c, d
,而列索引為 one, two
。
4.2 ndarrays 或 lists 字典 -> DataFrame
import pandas as pd# 列表構成的字典d = {'one' : [1, 2, 3, 4], 'two' : [4, 3, 2, 1]}df1 = pd.DataFrame(d) # 未指定索引df2 = pd.DataFrame(d, index=['a', 'b', 'c', 'd']) # 指定索引print dfprint df2
注意觀察它們之間的不同。
4.3 帶字典的列表 -> DataFrame
import pandas as pd# 帶字典的列表d = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]df = pd.DataFrame(d)print df
4.4 DataFrame.from_ 方法
pandas 的 DataFrame 下面還有 4 個以 from_ 開頭的方法,這也可以用來建立 Dataframe。
例如:
import pandas as pdd = [('A', [1, 2, 3]), ('B', [4, 5, 6])]c = ['one', 'two', 'three']df = pd.DataFrame.from_items(d, orient='index', columns=c)print df
4.5 列選擇,新增,刪除
接下來,我們延續上面的 4.4 裡面的資料來演示。
在一維資料結構 Series 中,我們用 df['標籤']
來選擇行。而到了二維資料 DataFrame 中,df['標籤']
表示選擇列了。例如:
print df['one']
刪除列的方法為 df.pop('列索引名'),例如:
df.pop('one')print df
新增列的方法未 df.insert(新增列位置索引序號, '新增列名', 數值),例如:
df.insert(3, 'four', [10, 20])print df
五、三維資料 Panel
Panel 是 Pandas 中使用頻率較低的一種資料結構,但它是三維資料的重要容器。
5.1 面板資料
Panel data 又稱面板資料,它是計量經濟學中派生出來的一個概念。在計量經濟學中,資料大致可分為三類:截面資料,時間序列資料,以及面板資料。而面板資料即是截面資料與時間序列資料綜合起來的一種資料型別。
簡單來講,截面資料指在某一時間點收集的不同物件的資料。而時間序列資料是指同一物件在不同時間點所對應的資料集合。
這裡引用一個城市和 GDP 關係的示例來解釋上面的三個概念(面板資料):
截面資料:
- 例如城市:北京、上海、重慶、天津在某一年的 GDP 分別為10、11、9、8(單位億元)。
時間序列資料:
- 例如:2000、2001、2002、2003、2004 各年的北京市 GDP 分別為8、9、10、11、12(單位億元)。
面板資料:
- 2000、2001、2002、2003、2004 各年中國所有直轄市的 GDP 分別為(單位億元):北京市分別為 8、9、10、11、12;上海市分別為 9、10、11、12、13;天津市分別為 5、6、7、8、9;重慶市分別為 7、8、9、10、11。
5.2 Panel 構成
在 Pandas 中,Panel 主要由三個要素構成:
- items: 每個專案(item)對應於內部包含的 DataFrame。
- major_axis: 每個 DataFrame 的索引(行)。
- minor_axis: 每個 DataFrame 的索引列。
簡而言之,在 Pandas 中,一個 Panel 由多個 DataFrame 組成。下面就生成一個 Panel。
import pandas as pdimport numpy as npwp = pd.Panel(np.random.randn(2, 5, 4), items=['Item1', 'Item2'], major_axis=pd.date_range('1/1/2000', periods=5), minor_axis=['A', 'B', 'C', 'D'])print wp
我們可以看到,wp 由 2 個專案、5 個主要軸和 4 個次要軸組成。其中,主要軸由 2000-01-01 到 2000-01-05 這 5 天組成的時間序列,次軸從 A 到 D。
你可以輸出 Item1 看一看。
print wp['Item1']
再看一看 Item2。
print wp['Item2]
可以看到,這兩個 Dataframe 的行索引及列索引是一致的。由於資料是隨機生成的,所以不一致。
5.2 Panel 的未來
由於 Panel 在 Pandas 中的使用頻率遠低於 Series 和 DataFrame,所以 Pandas 決定在未來的版本中將 Panel 移除,轉而使用 MultiIndex DataFrame 來表示多維資料結構。
這裡,可以用到 Panel.to_frame() 輸出多維資料結構。就拿上面的例子繼續:
print wp.to_frame()
六、實驗總結
這一章節,我們著重介紹了 Pandas 的資料結構,只有熟悉了這三種(尤其是前兩種)資料結構之後,才能對後面採用 Pandas 進行資料預處理有更深刻的理解。
七、課後作業
你知道 Pandas 的名字是怎麼來的嗎?
答案:點選
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow