Pandas 數據結構 DataFrame
1. 前言
上一節我們講述了 Pandas 兩種數據結構之一 Series,并介紹了該數據結構的特點、常用屬性及方法。Series 數據結構能有效的描述我們實際應用中的一維數據,然而,我們實際生活中接觸較多的是有行和列的二維數據,那 Pandas 庫中的二維數據結構又是怎樣表示的呢?
Pandas 庫中的 DataFrame 是一個二維數據結構,可以想象成我們常用的 Excel,它是Pandas 應用中最常用的數據結構。
2. DataFrame 數據結構概述
DataFrame 是一種表格型的數據結構,含有一組有序的列,每列可以存放任意類型的數據,可以看做是由Series組成的字典(公用同一個索引),它有行索引和列索引,行索引在左側,列索引在上方,并可以通過操作指定行索引和列索引的值。
3. DataFrame 數據結構常用的屬性
3.1 DataFrame 常用的屬性
常用屬性 | 屬性描述 |
---|---|
values | 返回 ndarray 類型的對象 |
index | 獲取 DataFrame 行索引對象(可以通過 index.values 獲取行索引值) |
columns | 獲取 DataFrame 列索引對象(可以通過 index.values 獲取列索引值) |
axes | 獲取行及列索引 |
ndim | 獲取 Series 的數據維度( Series 是一維數組) |
shape | 獲取 DataFrame 數據結構 |
size | 獲取 Series 的數據類型 |
DataFrame 數據結構的屬性和 Series 的部分屬性內容是相同的,但因為是二維數據結構,也有自己獨特的一些屬性,下面我們通過代碼逐一介紹。
實例:我們通過定義一個 DataFrame 數據結構,然后分別演示上面的屬性操作。
# 引入pandas
import pandas as pd
# 定義一個dataframe數據結構的對象
data={'bookname':['python入門','python編程','python實戰'],
'author':['Eric','張健','劉輝'],
'price':['49.9','36.5','67.4']}
frame_obj=pd.DataFrame(data)
print(frame_obj)
# --- 輸出結果 ---
bookname author price
0 python入門 Eric 49.9
1 python編程 張健 36.5
2 python實戰 劉輝 67.4
具體的屬性操作:
# values 屬性
print(frame_obj.values)
#--- 輸出結果 ---
[['python入門' 'Eric' '49.9']
['python編程' '張健' '36.5']
['python實戰' '劉輝' '67.4']] # 一個ndarray類型的對象
# index 屬性
print(frame_obj.index.values)
#--- 輸出結果 ---
[0 1 2] # 這是一個一維數組 是dataframe數據對象的行索引值
# columns 屬性
print(frame_obj.columns.values)
#--- 輸出結果 ---
['bookname' 'author' 'price'] # 這是一個一維數組 是dataframe數據對象的列索引值
# axes 屬性
print(frame_obj.axes)
#--- 輸出結果 ---
[RangeIndex(start=0, stop=3, step=1), Index(['bookname', 'author', 'price'], dtype='object')] # 對應的行索引和列索引
# ndim 屬性
print(frame_obj.ndim)
#--- 輸出結果 ---
2 # 2正式dataframe的數據維度
# shape 屬性
print(frame_obj.shape)
#--- 輸出結果 ---
(3, 3) # 該dataframe數據結構是3行3列的
# size 屬性
print(frame_obj.size)
#--- 輸出結果 ---
9 # 數據的個數,二維3乘以3是9個數據
3.2 DataFrame 常用的操作方法
接下來我們一起看下dataframe的常用方法,見證這個二維數據的厲害吧。
常用函數 | 函數描述 |
---|---|
DataFrame() | 創建一個DataFrame數據結構的對象 |
head() | 用于查看數據集的前n行 |
info() | 快速查看數據的描述 |
tail() | 用于查看數據集的后n行 |
T | 轉置函數 |
sum() | 求和函數 |
下面我們分別看一下每個方法的具體操作實例:
DataFrame() 方法
該方法用于創建 DataFrame 對象,我們可以指定行索引和列索引創建,還可以通過字典進行創建。下面代碼中分部創建一個4*4的 DataFrame。
# 1.通過傳入數據,行索引,列索引進行創建
df1=pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],
index=list('ABCD'),columns=list('ABCD'))
print(df1)
# --- 輸出結果 ---
A B C D
A 1 2 3 4
B 5 6 7 8
C 9 10 11 12
D 13 14 15 16
# 第一個參數是存放在DataFrame里的數據,第二個index是行名索引,第三個columns是列索引,注意:這里index,columns的list長度要和對應的行和列索引數量一致,不然會報錯。
# 1.通過字典進行創建
data={'A':['1','2','3','4'],
'B':['5','6','7','8'],
'C':['9','10','10','11'],
'D':['12','13','14','15']}
df2=pd.DataFrame(data)
print(df2)
# --- 輸出結果 ---
A B C D
0 1 5 9 12
1 2 6 10 13
2 3 7 10 14
3 4 8 11 15
head() 方法
該方法通過傳入的值,查找數據的的前n行
# 2.head(2) 取前兩行數據
data={'A':['1','2','3','4'],
'B':['5','6','7','8'],
'C':['9','10','10','11'],
'D':['12','13','14','15']}
df2=pd.DataFrame(data)
print(df2.head(2))
# --- 輸出結果 ---
A B C D
0 1 5 9 12
1 2 6 10 13
# 這里我們輸出了前兩行的數據
info() 方法
通過該方法,可以看到數據的描述信息摘要,在對數據進行探索性分析時比較有用,比如行和列數,每個值的類型,以及非空值的數量。
# 3.info() 取前兩行數據
data={'A':['1','2','3','4'],
'B':['5','6','7','8'],
'C':['9','10','10','11'],
'D':['12','13','14','15']}
df2=pd.DataFrame(data)
print(df2.info())
# --- 輸出結果 ---
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 A 4 non-null object
1 B 4 non-null object
2 C 4 non-null object
3 D 4 non-null object
dtypes: object(4)
memory usage: 256.0+ bytes
None
tail() 方法
通過傳入的值,返回 DataFrame 對象的后幾行數據
# 4.tail(2) 取后兩行數據
data={'A':['1','2','3','4'],
'B':['5','6','7','8'],
'C':['9','10','10','11'],
'D':['12','13','14','15']}
df2=pd.DataFrame(data)
print(df2.tail(2))
# --- 輸出結果 ---
A B C D
2 3 7 10 14
3 4 8 11 15
# 這里輸出的是后兩行數據
T 方法
直接字母 T,可以將 DataFrame 的行和列進行置換。
# 5.T 進行置換行和列
data={'A':['1','2','3','4'],
'B':['5','6','7','8'],
'C':['9','10','10','11'],
'D':['12','13','14','15']}
df2=pd.DataFrame(data)
print(df2)
# --- 輸出結果 ---
A B C D
0 1 5 9 12
1 2 6 10 13
2 3 7 10 14
3 4 8 11 15 # 原dataframe
print(df2.T)
# --- 輸出結果 ---
0 1 2 3
A 1 2 3 4
B 5 6 7 8
C 9 10 10 11
D 12 13 14 15 # 進行置換后,行和列位置變換
sum() 方法
sum() 是求和方法,默認是對每列求和,傳入 1 也就是 sum(1) ,是對每行進行求和。
# 1.sum()對每列求和,sum(1)對每行進行求和
data={'A':[1,2,3,4],
'B':[5,6,7,8],
'C':[9,10,11,12],
'D':[13,14,15,16]}
df2=pd.DataFrame(data)
print(df2)
# --- 輸出結果 ---
A B C D
0 1 5 9 13
1 2 6 10 14
2 3 7 11 15
3 4 8 12 16 # 原dataframe數據
print(df2.sum())
# --- 輸出結果 ---
A 10
B 26
C 42
D 58
dtype: int64 # 對每列進行求和
print(df2.sum(1))
# --- 輸出結果 ---
0 28
1 32
2 36
3 40
dtype: int64 # 對每行進行求和
4. 小結
該小節內容講述了 Pandas 庫中的第二個重要數據結構 DataFrame ,它作為二維數據結構,擁有 Series 之外的獨特屬性和方法內容。本節課程的重點如下:
- DataFrame 數據結構的常用屬性;
- DataFrame 數據結構的常用操作方法;
Tips:想要學習更多Pandas相關知識,可以點擊
Pandas Pandas讀取數據文件
Pandas 數據結構Series
Pandas 讀取MySql數據