DataFrame(1)結構介紹
1、DataFrame資料結構的解釋說明
index表示的是行索引,column表示的是列索引,values表示的是數值,其實不管是行索引,還是列索引都可以看作是索引Index。從每一行看,DataFrame可以看作是一行行的Series序列上下堆積起來的,每個Series的索引就是列索引[0,1,2,3];從每一列看,DataFrame可以看作是一列列的Series序列左右堆積起來的,每個Series的索引就是行索引[0,1,2]。
DataFrame的預設理解方式是:DataFrame其實就是由很多個數據型別不一樣的列Series組成。對於上圖,此DataFrame其實就是由如下四個Series組成,它們的索引都是行索引[0,1,2]。
可以把一個DataFrame,類比成MySQL中的一張表:
MySQL表中,每個列欄位的資料型別基本都不一樣,每張表都有很多個列欄位;
如果把MySQL表中的每個列看做是一個數據型別的Series,一張MySQL表就可以看做是由很多個數據型別不一樣的Series組成,和我們上面講述的一致。
2、DataFrame的index屬性和columns屬性
1)構造一個DataFrame
import numpy as np import pandas as pd df = pd.DataFrame(np.random.randint(70,100,(3,5)), index=["地區1", "地區2", "地區3"], columns=["北京","天津", "上海","瀋陽", "廣州"]) display(df)
結果如下:
2)index和columns屬性
df = pd.DataFrame(np.random.randint(70,100,(3,5)), index=["地區1", "地區2", "地區3"], columns=["北京","天津", "上海","瀋陽", "廣州"]) display(df) x = df.index display(x) list(df.index) y = df.columns display(y) list(df.columns)
結果如下:
① 修改行索引:df.index
df = pd.DataFrame(np.random.randint(70,100,(3,5)), index=["地區1", "地區2", "地區3"], columns=["北京","天津", "上海","瀋陽", "廣州"]) display(df) df.index = ["a","b","c"] display(df)
結果如下:
② 修改列索引:df.columns
df = pd.DataFrame(np.random.randint(70,100,(3,5)), index=["地區1", "地區2", "地區3"], columns=["北京","天津", "上海","瀋陽", "廣州"]) display(df) df.columns = ["a","b","c"] display(df)
結果如下:
3)DataFrame的索引物件Index
觀察“DataFrame的資料結構圖”可以發現:每個df既有一個行索引index,又有一個列索引columns。但是不管行索引index,還是列索引columns,統一都都叫做 “Index物件”。不同的是在建立df,指定引數的引數名稱的時候,為了方便區分行索引和列索引 ,把行索引這個“Index物件”叫做index,把列索引這個“Index物件”叫做columns 。
記住:Index索引物件中的元素不支援修改。
# pd.Index()用於建立一個Index物件 x = pd.Index([1,2,3]) display(x) display(type(x)) x[0] = 1
結果如下:
3、name屬性
1)怎麼理解DataFrame的name屬性
我們知道:取出DataFrame中的每一行、每一列都是一個Series,組成這個DataFrame物件的每個sereis都有一個名稱,這個名稱,就是對應的那一行、列的索引。如圖所示 ,上述有“紅橙黃綠藍靛紫黑”八種顏色,分別編號為1-8,每個號對應的都是一個Series。Series1的name為“地區1”,Series2的name為“地區2”…Series8的name為“廣州”。
接下來,我們使用程式碼檢驗一下。
df = pd.DataFrame(np.random.randint(70,100,(3,5)), index=["地區1", "地區2", "地區3"], columns=["北京","天津", "上海","瀋陽", "廣州"]) display(df) df.loc["地區1"].name df.loc["地區2"].name ...... df["廣州"].name
結果如下:
2)為行索引、列索引設定name名稱屬性:df.index.name和df.columns.name
df = pd.DataFrame(np.random.randint(70,100,(3,5)), index=["地區1", "地區2", "地區3"], columns=["北京","天津", "上海","瀋陽", "廣州"]) display(df) df.index.name = "index_name" df.columns.name = "columns_name" display(df)
結果如下:
綜上所述:通過上面的演示,我們不僅DataFrame的每一行、每一列有一個name名稱,並且我們還可以給DataFrame的行索引和列索引分別設定一個name名稱。