当前位置 - 股票行情交易網 - 財經資訊 - Pandas 入門

Pandas 入門

pd.Series 主要設置兩個參數,data 和 index,如果不設置 index,則 index 從 0 開始遞增。除此之外,還可以設置 dtype。

除了直接設置各個字段,還可以將字典作為參數傳入,series 會自動將 key 作為 index,將 value 作為 data。

為了保證數據存取的效率,series 的 index 必須是可哈希的。

series 和字典壹樣,索引和修改的時間復雜度為 。它有兩種索引方式,第壹種索引方式與字典相同,但強烈不推薦,會導致各種副作用:

在某些情況下,它會產生歧義:

第二種索引方式是采用 .loc 方法,這種寫法是推薦的:

註意壹個細節:利用 index 做切片時,和 list 或者 array 利用下標切片,不包括末尾元素不同,index 切片是包括 end 元素的。

除了利用 index 切片,Series 也可以用下標切片,此時不包括終點下標對應的元素,表現和 python 慣例壹致:

不像字典的 key 是唯壹的,Series 支持 index 包含重復元素。但對 Series 做切片時,如果重復的 index 不是相鄰的,則會報錯:"Cannot get left\right slice bound for non-unique label: 'xxx' "。

因此強烈建議先對 index 排序,這樣可以保證切片能夠壹直能正確運行,並且還能提高索引的效率。

和 numpy 壹樣,Series 也支持高級索引:

兩個 Series 可以相加,只有相同 label 的數據會相加,只存在於其中壹個 Series 的數據相加後為 NaN,但也可以指定壹方缺失的 label 對應的默認值:

需要註意的是,在操作過程中, series value 的數據類型可能會隱式地被改變,如果不註意,很有可能影響增刪的效率,甚至產生錯誤的結果。

影響效率的例子:

產生錯誤結果的例子:

DataFrame 還支持廣播功能:

可以將 DataFrame 保存為 csv 文件或 json 文件

包括壹系列函數:

p.describe() 默認只顯示數字列,但也可以設置參數 include='all' 現實所有列。

p.loc['sonia'] 展示 sonia 行

p.loc['sonia', 'age'] 只顯示 sonia 的年齡

篩選出女性條目:

增加年齡篩選條件:

DataFrame.mean() 可以按列計算平均值

幾種不建議的寫法:

p.drop(columns=['mean', ], inplace=True) 用於刪除壹列或多列, inplace 作用是,設置是否修改原來的 p,如果True,返回 None,原 p 被修改,如果 False,返回被修改後的 DataFrame,同時原 p 保留。

DataFrame 支持所有 numpy 的函數,numpy 函數可以直接施加在 DataFrame 上,例如:

但是,如果需要用到 DataFrame 的 label 對齊特性,例如兩個 index 順序並不相同的 DataFrame 相加,那麽 numpy 的函數將直接計算中間的 values,而不會考慮它們 label 對齊的問題。(該問題已經在 pandas 0.2.5 中被修正)

運算中設置 fill_value 可以讓表中缺失的數據被 fill_value 代替。

當壹個 Series 和壹個 DataFrame 相加時,pandas 會默認 Series 是壹行,並把它廣播到其它行。Series 的 index 會被對應到 DataFrame 的列上,並對齊。如果 Series 的 index 與 DataFrame 的列沒關系,那麽會擴增 DataFrame,擴增區域對應的數據為 NaN。如果想讓 Series 的 index 和 DataFrame 的index 對應,則需要指定 axis=0:

在構建 pandas Series 或者 DataFrame 時,有兩種方式可以表示 NaN,壹種是 np.NaN ,另壹種是python 的 None 對象。 np.NaN 的數據類型是 float ,因此,在 pandas 中,存在 NaN 的對象要麽是 float64 的,要麽是 object 類型。

pandas 利用如下方法處理缺失數據:

MultiIndex 適用於數組大於二維的情況。所有可以用 Index 的地方,都可以用 MultiIndex 。

MultiIndex Series

MultiIndex DataFrame 利用 from_product 可以方便地創建 MultiIndex。

MultiIndex DataFrame 的索引十分方便

元組配合 slice ,為 MultiIndex DataFrame 做切片:

concat 用於將兩個表拼接起來,它適用於兩個表有相同的 index 或者有相同的 columns。

concat 也適用於拼接 Series,但是不論是 DataFrame 還是 Series,它不會檢查各行的 index 是否重復。

壹個解決方案是設置 verify_integrity 參數,它會在遇到兩個相同 index 的時候報錯。但是這無疑會導致額外的計算,因此除非確實必要,壹般不設置它。

設置拼接參數

merge 適用於兩個表某 相同,然後所有的融合都基於該列:

merge 默認采取 inner join 的策略,如果以某列為基準,那麽最終結果中,只有同時出現在這兩列中的數據被保留。

總***有三種merge 的方式:

merge 可以設置 on= 或者 left_on= 、 right_on= 顯式指定基準列

當兩表中的基準列元素不完全壹致時,通過設置 how 有四種 merge 策略:

groupby 按照某個指標聚類,分別計算各類數據

groupby 返回值的屬性:

groupby 方法分發。 groupby 返回的對象如果沒有實現某個 DataFrame的方法,該對象仍然可以調用,只不過是遍歷每個類別,分別調用。

groupby().agg 方法:agg 中以 list/dict 形式傳入函數名(或名字的字符串),計算每個組的統計量。

groupby().filter() filter 內傳入篩選條件,可以是 lambda 表達式

groupby().transform() transform 內傳入變換函數,如 lambda 表達式,變換函數將施加在每個子 group 上,壹個經典用例是用它來對每個 group 內部中心化,或者用group 均值代替其中的 NaN。

以 titanic 的例子,我們希望得到這樣的表格:有三行,每行代表壹個艙位級別;有兩列,每列代表壹個性別。此時需要用到 pivot_table 。 pivot_table 相當於把 groupby 的結果表示為二維表格。

numpy 和 pandas 可以很好地處理各種格式的時間字符串,將其轉化為標準格式。同時提供了壹系列方法,對時間序列求區間、采樣等等。