給妹子講python-S02E10Pandas之DataFrame對象簡介

python,不管你懂沒懂,反正妹子是搞懂了

轉載請註明:知乎專欄《給妹子講python》--醬油哥

【要點搶先看】

1.DataFrame是若干有序排列的Series對象2.DataFrame可以看作含有行索引和列索引的二維數組結構3.DataFrame可以看作是特殊字典,反應了列索引到Series的映射關係4.DataFrame的常見創建方法

【妹子說】按照上一集的思路,今天我們繼續學習Pandas的另一個基礎數據結構DataFrame吧。

我們依然按照前面的學習路線圖,對DataFrame數據對象先進行一個全局的概覽。

如果說Series對象可以類比為帶靈活索引類型的一維數組,那麼對比的看,DataFrame可以被看做是既有靈活的行索引,又有靈活列索引的二維數組。那麼我們可以這麼說:

DataFrame是有序排列的若干Series對象,而這些Series對象都有相同的索引。

我們來演示這個過程:

import pandas as pdarea_dict = {California:423967,Texas:695662,New York:141297}population_dict = {California:1.3, Texas:0.98, New York:1.13}area = pd.Series(area_dict)population = pd.Series(population_dict)print(area)print(population)California 423967New York 141297Texas 695662dtype: int64California 1.30New York 1.13Texas 0.98dtype: float64

這是我們初始的兩個Series對象,接下來我們藉助他們來展示Series和DataFrame的關係。我們可以用一個字典來構建含有這兩個Series數據的二維對象,這就是DataFrame.

import pandas as pdarea_dict = {California:423967,Texas:695662,New York:141297}population_dict = {California:1.3, Texas:0.98, New York:1.13}area = pd.Series(area_dict)population = pd.Series(population_dict)states_df = pd.DataFrame({area:area,population:population})print(states_df) area populationCalifornia 423967 1.30New York 141297 1.13Texas 695662 0.98

可以看到,利用含有Series作為值的字典,就可以構造一個DataFrame,不難看出,這個字典的值,即一組Series對象,共享了行索引(index),而這個字典的一組鍵,則構成了這個DataFrame對象的列索引(columns)。

獲取DataFrame對象的行、列索引值也非常簡單:

import pandas as pdstates_df = pd.DataFrame({area:area,population:population})print(states_df.index)print(states_df.columns)Index([California, New York, Texas], dtype=object)Index([area, population], dtype=object)

可以看出,通過index屬性,我們獲取了其行索引,通過columns,我們獲取了其列索引。所以我們可以總結一下,DataFrame可以看作是具有行、列索引的二維表格型數組結構。

那麼,類似的,DataFrame和字典有何關聯呢?從上面利用兩個Series構造DataFrame的過程中我們不難發現,DataFrame也可以看做是特殊的字典,他的鍵是列索引,其映射的值就是一個個的Series對象。

import pandas as pdstates_df = pd.DataFrame({area:area,population:population})print(states_df[area])California 423967New York 141297Texas 695662Name: area, dtype: int64

獲取DataFrame內部數據元素的方法還有很多,不過還是老話,這一集只從全景上來把握DataFrame對象,更細的知識我們後面幾集慢慢分解。

最後,我們來總結一下DataFrame對象的幾種常見創建形式:

第一種,通過Series對象字典創建,這個剛剛舉過例子。

第二種,因為DataFrame是特殊的字典,因此可以通過一個字典列表來創建:

import pandas as pddata = [{a:13,b:4},{a:CHN,b:USA}]df = pd.DataFrame(data,index=[c,d])print(df) a bc 13 4d CHN USA

第三種,同時字典是帶有行列索引的二維數組結構,因此可以用NumPy二維數組創建:

import pandas as pdimport numpy as npdf = pd.DataFrame(np.random.rand(3,2), columns=[foo,bar], index=[a,b,c])print(df) foo bara 0.249028 0.450017b 0.885382 0.742781c 0.329082 0.579758

【妹子說】感覺這種表格型的數據結構應該是挺有用的,因為很多實際的數據源都是這種形式,很容易直觀的存儲和展現數據。


推薦閱讀:

ClickHouse數據壓縮[譯文]
數據分析的黑馬-ClickHouse介紹
Kylin 初體驗總結(kafka+superset+ldap)
SPSS應用—時間序列分析

TAG:Python | 數據分析 | 數據分析工具 |