1. 程式人生 > 其它 >DataFrame(1)結構介紹

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名稱。