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