Python Pandas 庫:Series、DataFrame 對象


Pandas

Pandas 是基於 NumPy 的分析結構化數據的工具集,它用於數據挖掘和數據分析,同時也提供數據清洗功能。Pandas 納入了大量庫和一些標准的數據模型,提供了高效地操作大型數據集所需的工具。Pandas 庫有 2 個主要的工具,分別是 DataFrame 對象和 Series 對象。可以進入 Pandas 官網Pandas 中文文檔做進一步了解。

Pandas 安裝並使用

安裝

在 cmd 命令下輸入命令,等待安裝完成即可。

pip install pandas

Anaconda 環境下配置就很簡單了,找到 Pandas 庫勾上就行,默認是啟用的。

使用

想要使用 Pandas 庫,就需要把 Numpy 和 Pandas 庫都包含進來,代碼如下。一般為了簡化 Pandas 庫的調用,約定俗成把 Pandas 簡化為 pd。

import numpy as np
import pandas as pd

Series 對象

Series 對象可以認為是自動索引的一維數組,支持對 int、float、string 和各種對象等類型的數據存儲。Series 對象的最大特點就是每一個數據元素,都有一個索引與之對應。

Series 對象的構造函數如下,參數的說明由表格所示:

pd.Series(data, index, dtype)
參數 說明
data 填充進 Series 對象的數據,支持多種數據類型
index 索引值,與 data 的長度相同,默認為 np.arange(n)
dtype 數據元素的數據類型

其中 data 可以是多種數據類型,例如 list、dict、ndarray 和標量等。例如如下代碼將創建一個空的 Series 對象:

s = pd.Series()

Series 對象創建

用 list 創建

如下代碼使用 list 來初始化 Series 對象,其中第一個 Series 對象的索引是默認值,第二個 Series 為另一個 list 的值。

alist = [1,2,3,4,5]
s = pd.Series(alist)
s = pd.Series(alist, ['a','b','c','d','e'])

用 dict 創建

如下代碼使用 dict 來初始化 Series 對象,字典的“鍵”將成為“值”的索引。

adict = {'a': 0, 'b': 1, 'c': 2}
s = pd.Series(adict)

用 ndarray 創建

如下代碼使用 ndarray 來初始化 Series 對象,其中第一個 Series 對象的索引是默認值,第二個 Series 為另一個 ndarray 的值。

a = np.arange(5, dtype = int)
s = pd.Series(a)
s = pd.Series(a, np.arange(1, 10, 2))

用標量創建

如下代碼使用標量來初始化 Series 對象,當沒有給定 index 參數時 Series 對象僅有 1 個數據元素。當給定 index 參數時,Series 對象的數據元素數量與 index 參數的數據元素數量相同,且每個數據元素的都是改標量。

s = pd.Series(7)
s = pd.Series(7, ['a','b','c','d','e'])

Series 對象屬性

Series 對象和 dict 有一定的相似性,它有 .index 和 .values 兩個屬性。index 屬性存儲了 Series 對象的索引集合,values 屬性存儲了 Series 對象的數據集合,二者都是以 ndarray 對象存在。同時 Series對象本身和 index 屬性都有一個 .name 屬性,該屬性可以給出對象的名字。下面是訪問這些屬性的樣例:

s = pd.Series([1,2,3,4,5], ['a','b','c','d','e'])
s.name = "Series 對象樣例"
s.index.name = "Series 對象樣例索引"
s
s.name
s.index
s.index.name
s.values


Series 對象還有一些屬性,如下表格所示。

屬性 說明
dtype 數據元素的數據類型
empty Series 對象是否為空,為空返回 True
ndim Series 對象的維度
size Series 對象的數據元素個數

查看這些屬性的簡單樣例如下:

s = pd.Series([1,2,3,4,5], ['a','b','c','d','e'])
s.dtype
s.empty
s.ndim
s.size

Series 對象操作

Series 對象的操作和 ndarray 對象的操作有一定的相似之處,同時和 dict 類型也有一定的相似之處。即 Series 對象即可以用下標對數據元素進行訪問和修改,也可以使用索引去訪問對應的值。除了使用索引進行訪問,也可以使用 get() 方法訪問數據,Series 對象也支持 in 操作符確定索引是否存在。
如下樣例分別使用下標、索引和 get() 方法訪問 Series 對象中的元素:

s = pd.Series([1,2,3,4,5], ['a','b','c','d','e'])
s[0]
s[1:]
s[:-2]
s['a']
s.get(1)
s.get('b')
'a' in s
1 in s


也可以通過上述方法對數據元素進行修改:

s = pd.Series([1,2,3,4,5], ['a','b','c','d','e'])
s[0] = 6
s[1:] = 7
s[:-2] = 8
s['a'] = 9


同時 Series 對象支持 bool 索引,也就是說訪問元素的中括號內可以是一個 bool 表達式,此時將回顯所有符合篩選條件的元素。例如:

s = pd.Series([1,2,3,4,5], ['a','b','c','d','e'])
s[s > 2] 

DataFrame

DataFrame 是由多種類型的列構成的二維標簽數據結構,是一個類似於 Excel 或 SQL 數據庫表的表格型的數據類型。DataFrame 既有行索引 index、也有列索引 columns,常用於表達二維數據或多維數據。

DataFrame 對象的構造函數如下,參數的說明由表格所示:

pandas.DataFrame( data, index, columns, dtype)
參數 說明
data 填充進 DataFrame 對象的數據,支持多種數據類型
index 行索引,默認值為 np.arrange(n)
columns 列索引,默認值為 np.arrange(n)
dtype 每列的數據類型

其中 data 可以是多種數據類型,例如 list、dict、ndarray 和 Series、DataFrame。例如如下代碼將創建一個空的 Series 對象:

df = pd.DataFrame()

DataFrame 對象創建

用 list 創建

如下代碼使用 list 創建 DataFrame 對象,其中第一個樣例創建的 DataFrame 對象有 1 個 column,第二個樣例在前者的基礎上給定了航索引和列索引。第三個樣例有 2 個column,這種方式可以擴展到更多的維度。

df = pd.DataFrame([1,2,3,4,5],dtype=float)
df = pd.DataFrame([1,2,3,4,5],['a','b','c','d','e'],['id'])
alist = [[1,'Python'],[2,'Java'],[3,'C++']]
df = pd.DataFrame(alist,columns=['Id','Language'])

用 dict 創建

用字典創建 DataFrame 對象的方式有 2 種,第一種是列表字典(dict 的每個元素都是 list),這種方法的簡單樣例如下。

df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']})
alist = ['a','b','c']
df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']},alist)


第二種是字典列表(list 的每個元素都是 dict),這種方法的簡單樣例如下。

alist = [{'Id': 1, 'Language': 'Python'},{'Id': 2, 'Language': 'Java'},{'Id': 2, 'Language': 'C++'}]
df = pd.DataFrame(alist)
df = pd.DataFrame(alist,['a','b','c'])

用 ndarray 創建

可以用 ndarray 字典來創建,如下樣例分別是一維 ndarray 對象和二維 ndarray 對象創建的樣例。

df = pd.DataFrame(np.arange(6))
df = pd.DataFrame(np.arange(6).reshape(2,3))

DataFrame 對象屬性

DataFrame 對象也有屬性,以下 3 個屬性可以分別獲取 DataFrame 對象的所有行索引、列索引和數據元素。

屬性 說明
index DataFrame 對象的所有行索引
columns DataFrame 對象的所有列索引
values 以 ndarray 對象形式返回所有數據元素

如下是訪問這些屬性的樣例:

df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']},['a','b','c'])
df.index
df.columns
df.values


DataFrame 對象還有一些屬性,如下表格所示。

屬性 說明
dtypes 數據元素的數據類型
empty DataFrame 對象是否為空,為空返回 True
ndim DataFrame 對象的維度
shape 返回一個元組描述 DataFrame 對象的形狀
size DataFrame 對象的數據元素個數
T 轉置行和列

查看這些屬性的簡單樣例如下:

df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']},['a','b','c'])
df.dtypes
df.empty
df.ndim
df.shape
df.size
df.T

DataFrame 對象操作

對列進行操作

DataFrame 對象對列的各種操作和字典類似,使用索引對某一列進行訪問,同時可以用類似字典的語法對列進行增加和刪除。例如下面是簡單的樣例:

df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']},['a','b','c'])
df['Language']
df['text'] = pd.Series([6,7,8],index = ['a','b','c'])
del df['text']

訪問和切片行

DataFrame 對象對行的各種訪問可以用 loc 方法或 iloc 方法進行訪問。

方法 說明
loc[index[,column]] 訪問索引 index 所在的行的數據,column 用於控制返回的列
iloc[idx] 訪問下標 idx 所在的行的數據,column 用於控制返回的列

例如下面是 loc 方法的樣例:

df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']},['a','b','c'])
df.loc['a']
df.loc[:'b']
df.loc['b':'c']
df.loc['b':'c', ['Id']]
df.loc['b':'c', ['Id','Language']]


例如下面是 iloc 方法的樣例:

df.iloc[0]
df.iloc[1:2]
df.iloc[1:2,[0]]
df.iloc[1:2,[0,1]]


對於行的切片,可以使用中括號指定下標進行切片。例如下面是簡單的樣例:

df = pd.DataFrame({'Id':[1,2,3],'Language':['Python','Java','C++']},['a','b','c'])
df[1:]
df[:-1]
df[0:1]

bool 索引

DataFrame 對象支持 bool 索引,也就是說訪問元素的中括號內可以是一個 bool 表達式,此時將回顯所有符合篩選條件的元素。例如:

df = pd.DataFrame(np.arange(6).reshape(2,3))
df[df > 2]

參考資料

Pandas 官網
Pandas 中文文檔
極客教程:Pandas 教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM