亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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  199545.6               James Gosling
1  python  199167.0            Guido van Rossum
2       C  197233.9  Dennis MacAlistair Ritchie
3      js  199559.5                Brendan Eich
4     php  201269.9              Rasmus Lerdorf
5     C++  198375.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  199559.5       Brendan Eich
4  201269.9     Rasmus Lerdorf
5  198375.0  Bjarne Stroustrup

輸出解析:通過設置區間為條件,可以看到查詢的結果正是對應行索引和列索引所包含內的是數據。

3.4 按條件查詢

按條件查詢是查詢數據符合一定條件的數據集,包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)等條件。

# 這里的 data 是上面我們從 Excel 中解析出來的數據
print(data.loc[data["價格"]<60])

# --- 輸出結果 ---
   編程語言   推出時間    價格              主要創始人
0  java  199545.6               James Gosling
2     C  197233.9  Dennis MacAlistair Ritchie
3    js  199559.5                Brendan Eich

輸出解析:這里的查詢條件為價格小于60的數據,可以看到結果查詢出了所有在價格上滿足該條件的數據。

Tips:注意條件等于,要用雙等于號 “ == ”,在程序中單個等于表示賦值,雙等于表示運算。

除了單個條件,還可以傳入多個條件,并通過運算符 &(與)表示兩邊條件都要滿足、| (或)表示兩邊條件有一個滿足就可以,進行多條件組合查詢:

# 這里的 data 是上面我們從 Excel 中解析出來的數據
print(data.loc[(data["價格"]<=69.9) & (data["推出時間"]=="1972年") ])

# --- 輸出結果 ---
  編程語言   推出時間    價格         主要創始人
2    C  197233.9  Dennis MacAlistair Ritchie

輸出解析:我們這里設置了兩個條件,一個是價格小于等于69.9,另一個是推出時間等于1972年,這兩個數據進行與運算,表示這兩個條件都滿足的數據??梢钥吹綌祿Y果是同時滿足了這兩個條件的所有數據集。

3.5 按函數查詢

函數查詢是在查詢的參數中傳入函數,查詢使該函數返回為 True 的數據集。

# 這里的 data 是上面我們從 Excel 中解析出來的數據
print(data.loc[data["推出時間"].isin(["1972年","1995年","1983年"])])

# --- 輸出結果 ---
  編程語言   推出時間    價格             主要創始人
0  java  199545.6               James Gosling
2     C  197233.9  Dennis MacAlistair Ritchie
3    js  199559.5                Brendan Eich
5   C++  198375.0           Bjarne Stroustrup

輸出解析:這里我們傳入了一個函數 isin( ) 該函數接受一個列表,判斷該列中元素是否在“推出時間 ”列表中 ,如果是就查詢出該數據集,從結果可以看出,查詢出了“推出時間”為1972年、1995年、1983年的數據集。當然,我們除了可以使用 Pandas 自帶的一些函數,我們也可以自定義一些條件函數,傳入參數進行查詢。

4.小結

本節課我們主要學習了對解析后的數據,按照我們業務實際的需要進行數據的查詢的方式,通過使用 loc() 查詢函數,以及對應的查詢參數,可以很好的滿足我們數據的查詢需要。本節課程的重點如下:

  • 掌握 loc() 數據查詢函數的使用方法;
  • 掌握查詢條件的五種類別,結合實際業務需求進行參數的傳入。

圖片描述

Tips:想要學習更多Pandas相關知識,可以點擊
Pandas 新增數據
Pandas 刪除數據
Pandas 修改數據