Pandas 查詢數據
1. 前言
通過前面幾個小節的學習,我們掌握了 Pandas 解析不同數據文件以及讀取 MySQL 數據庫的操作方法,接著分析了 Pandas 庫中兩個核心的數據結構 Series 和 DataFrame ,并掌握了他們常用的屬性和操作方法。
前幾節的學習讓我們獲取了數據,并認識了這些數據的特點,從這節開始,我們將學習如何對這些數據做進一步的處理。本節我們將學習 Pandas 查詢數據,根據我們需要的條件,對已有的數據做查詢操作。
2. 查詢方法概述
Pandas 在解析數據時,會根據一定的條件進行解析處理,這種方式雖然在源數據上做了篩選,但實際的業務需求中,對解析出來的數據,我們會根據更加明確的條件和需要,去查詢數據內容,為進一步的數據操作和分析做好鋪墊。Pandas 中提供了多種查詢函數,方便我們的數據查詢操作,我們需要查詢的數據條件不同,所采用的操作也有所不同,總的來說,我們的查詢條件可以為按單個值查詢、按值列表查詢、按值區間查詢、按條件表達式查詢和按函數查詢五種查詢的方式,接下來我們將以 loc() 查詢函數為例,詳細講解每種查詢的具體操作。
Tips:loc() 的查詢條件,可以使用label值,也可以使用布爾值,他豐富的傳值方式,以及簡潔的使用方式,成為 Pandas 數據查詢較為常用的方法。
查詢方法 | 簡述 |
---|---|
loc( ) | 通過標簽或布爾數字查詢數據集 (推薦使用的查詢方法) |
iloc( ) | 通過索引位來查詢數據集 |
query( ) | 通過布爾表達式查詢數據列 |
3. 查詢方法操作
這里我們通過解析 Excel 數據文件,獲得了數據,具體數據解析內容如下:
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節/execl數據demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67.0 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75.0 Bjarne Stroustrup
輸出解析:可以看到解析后的數據結構是 DataFrame 的二維數據表,有行索引和列索引,接下來我們將通過多種查詢方式,對該二維數據進行查詢。
3.1 按單個值查詢
在 loc() 函數中按單個值查詢,我們的查詢條件參數傳入的是具體的單個 lable 值:
# 這里的 data 是上面我們從 Excel 中解析出來的數據
print(data.loc[1])
# --- 輸出結果 ---
編程語言 python
推出時間 1991年
價格 67
主要創始人 Guido van Rossum
Name: 1, dtype: object
輸出解析: 這里可以看到 loc() 函數中,我們查詢的數據條件是行索引值等于1的數據集,通過查詢結果我們可以看到,輸出的是 Series 一維數據結構,他列索引的值是我們二維數據的列索引值內容。
我們也可以查詢出具體的單個數據值,通過傳入兩個 Label 值進行數據值的查詢。
# 這里的 data 是上面我們從 Excel 中解析出來的數據
print(data.loc[1,"價格"])
# --- 輸出結果 ---
67.0 # 這里可以看到輸出結果為具體的數據項值
Tips:loc() 多個查詢值的傳遞,第一個參數選擇 index (行索引值,最左側一列),第二個參數選擇 column(列索引值,最上面一行),如果參數傳錯,查詢時匯報索引值查找錯誤。
如下面,我們將行索引和列索引的順序顛倒,則會報錯:
print(data.loc["價格",1])
# --- 輸出結果 ---
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-17-b625c01645c5> in <module>
----> 1 print(data.loc["價格",1])
……
……
KeyError: '價格'
3.2 按列表查詢
在 loc() 函數中,我們通過傳入要查詢的列表項,可以查詢多個數據內容,返回的數據結果是 Series 數據結構或者 DataFrame 數據結構。
# 這里的 data 是上面我們從 Excel 中解析出來的數據
print(data.loc[[1,2,5],["編程語言","價格"]])
# --- 輸出結果 ---
編程語言 價格
1 python 67.0
2 C 33.9
5 C++ 75.0
輸出解析: 我們傳入兩個查詢列表 [1,2,5] 和 [“編程語言”,“價格”],可以看到查詢的結果為二維數據結構的數據集。
3.3 按區間查詢
按區間查詢主要用到了英文狀態下的冒號 “ : ” ,冒號左側是區間的開始位置,右側是結束位置。
# 這里的 data 是上面我們從 Excel 中解析出來的數據
print(data.loc[0:5,["編程語言","價格"]])
# --- 輸出結果 ---
編程語言 價格
0 java 45.6
1 python 67.0
2 C 33.9
3 js 59.5
4 php 69.9
5 C++ 75.0
輸出解析: 這里的行索引我們傳入的是區間 0:5,從結果中可以看到數據內容正是這5行的數據,其中是包含區間兩端的值的。
這里的行索引和列索引都可以設置為區間查找:
# 這里的 data 是上面我們從 Excel 中解析出來的數據
print(data.loc[3:5,"推出時間":"主要創始人"])
# --- 輸出結果 ---
推出時間 價格 主要創始人
3 1995年 59.5 Brendan Eich
4 2012年 69.9 Rasmus Lerdorf
5 1983年 75.0 Bjarne Stroustrup
輸出解析:通過設置區間為條件,可以看到查詢的結果正是對應行索引和列索引所包含內的是數據。
3.4 按條件查詢
按條件查詢是查詢數據符合一定條件的數據集,包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)等條件。
# 這里的 data 是上面我們從 Excel 中解析出來的數據
print(data.loc[data["價格"]<60])
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1995年 45.6 James Gosling
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
輸出解析:這里的查詢條件為價格小于60的數據,可以看到結果查詢出了所有在價格上滿足該條件的數據。
Tips:注意條件等于,要用雙等于號 “ == ”,在程序中單個等于表示賦值,雙等于表示運算。
除了單個條件,還可以傳入多個條件,并通過運算符 &(與)表示兩邊條件都要滿足、| (或)表示兩邊條件有一個滿足就可以,進行多條件組合查詢:
# 這里的 data 是上面我們從 Excel 中解析出來的數據
print(data.loc[(data["價格"]<=69.9) & (data["推出時間"]=="1972年") ])
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
2 C 1972年 33.9 Dennis MacAlistair Ritchie
輸出解析:我們這里設置了兩個條件,一個是價格小于等于69.9,另一個是推出時間等于1972年,這兩個數據進行與運算,表示這兩個條件都滿足的數據??梢钥吹綌祿Y果是同時滿足了這兩個條件的所有數據集。
3.5 按函數查詢
函數查詢是在查詢的參數中傳入函數,查詢使該函數返回為 True 的數據集。
# 這里的 data 是上面我們從 Excel 中解析出來的數據
print(data.loc[data["推出時間"].isin(["1972年","1995年","1983年"])])
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1995年 45.6 James Gosling
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
5 C++ 1983年 75.0 Bjarne Stroustrup
輸出解析:這里我們傳入了一個函數 isin( ) 該函數接受一個列表,判斷該列中元素是否在“推出時間 ”列表中 ,如果是就查詢出該數據集,從結果可以看出,查詢出了“推出時間”為1972年、1995年、1983年的數據集。當然,我們除了可以使用 Pandas 自帶的一些函數,我們也可以自定義一些條件函數,傳入參數進行查詢。
4.小結
本節課我們主要學習了對解析后的數據,按照我們業務實際的需要進行數據的查詢的方式,通過使用 loc() 查詢函數,以及對應的查詢參數,可以很好的滿足我們數據的查詢需要。本節課程的重點如下:
- 掌握 loc() 數據查詢函數的使用方法;
- 掌握查詢條件的五種類別,結合實際業務需求進行參數的傳入。
Tips:想要學習更多Pandas相關知識,可以點擊
Pandas 新增數據
Pandas 刪除數據
Pandas 修改數據