pandas的數據檢索功能是其最基礎也是最重要的功能之一。 pandas中最常用的幾種數據過濾方式如下: 行列過濾:選取指定的行或者列 條件過濾:對列的數據設置過濾條件 函數過濾:通過函數設置更加複雜的過濾條件 本篇所有示例所使用的測試數據如下: import pandas as pd import ...
pandas
的數據檢索功能是其最基礎也是最重要的功能之一。
pandas
中最常用的幾種數據過濾方式如下:
- 行列過濾:選取指定的行或者列
- 條件過濾:對列的數據設置過濾條件
- 函數過濾:通過函數設置更加複雜的過濾條件
本篇所有示例所使用的測試數據如下:
import pandas as pd
import numpy as np
fp = "http://databook.top:8888/pandas/cn-people.csv"
df = pd.read_csv(fp)
df
1. 行列過濾
pandas
中最常用的按行或者按列選擇數據的函數是 loc
和 iloc
。
1.1 loc 函數
loc
函數通過標簽索引選擇行列數據,可以在一個語句中同時指定行和列的條件。
按範圍選取行:
df.loc([1:5, :])
選取指定的行:
df.loc[[1, 5], :]
按範圍選取列:
df.loc[:, "年份":"指標中文"]
選取指定的列:
df.loc[:, ["年份","指標中文"]]
行和列也可以同時設置:
df.loc[1:3, ["年份","指標中文"]]
1.2 iloc 函數
iloc
函數通過整數位置索引選擇行列數據。
這種方法與loc方法類似,但是它使用整數位置而不是標簽。
按範圍選擇行:
df.iloc([1:5, :])
註意這裡可以看出iloc
和loc
的區別,同樣的範圍[1:5]
,
iloc
不包括index=5
的數據,而loc
是包括index=5
的數據。
選擇指定的行:
df.iloc[[1, 5], :]
這種選擇方式下,iloc
和loc
函數返回的結果是一樣的。
按範圍選擇列:
df.iloc[:, 0:3]
註意,這裡是 iloc
和loc
的另一個區別,
iloc
只能用數字序列來表示列的範圍(第一列對應數字0),
回顧之前的loc
函數,我們可以用列名來表示範圍的df.loc[:, "年份":"指標中文"]
。
另外,iloc
表示列的範圍0:3
表示是0,1,2
三列,不包括3
這一列。
選擇指定的列:
df.iloc[:, [0, 2]]
同loc
一樣,iloc
也可以行和列同時設置:
df.iloc[1:5, [0, 2]]
2. 條件過濾
行列過濾的方式是基於索引和列名稱來過濾的,除此之外,還可以根據列的值來過濾。
這也是分析時常用的過濾方式。
2.1 單條件
根據列的值來過濾,列的值是數值還是字元串都可以。
df[df["年份"] > 2020]
字元串的過濾方式:
df[df["指標中文"].str.contains("鄉村")].head()
2.2 多條件
除了設置單獨的條件之外,也支持通過邏輯符號&
和|
來設置多個條件。
df[(df["年份"] > 2020) & (df["指標中文"].str.contains("鄉村"))]
必須同時滿足年份>2021
和指標中文包含鄉村
兩個條件的數據,只有1條。
df[(df["年份"] > 2020) | (df["指標中文"].str.contains("鄉村"))].head(6)
只要滿足年份>2021
和指標中文包含鄉村
兩個條件之一的數據。
3. 函數過濾
pandas
中還有兩種通過函數來過濾和轉換數據的方式,這種方式可以將自定義的函數應用到數據之上。
這樣就提供了相當靈活的數據操作方式。
3.1 apply
針對DataFrame
某一列數據的apply
。
比如下麵的示例增加一列,其值是將value
列的數據放大10倍:
df["value10倍"] = df["value"].apply(lambda x: x*10)
df
3.2 map
針對DataFrame
某一列數據的map
。
比如下麵的示例增加一列,其值是設置指標中文的縮寫。
df["指標縮寫"] = df["指標中文"].map({"年末總人口": "總人口", "鄉村人口": "鄉村"})
df
4. 總結回顧
本篇主要介紹了pandas
數據檢索的常用方式,數據檢索是做分析時最常用的步驟。
通過數據過濾方法,快速確定用於分析的數據範圍,剝離無用的數據,提高分析的效率。
數據檢索方式由易到難分別為:
- 行列過濾,
loc
和iloc
- 條件過濾,單條件和多條件過濾
- 函數過濾,自定義函數靈活的調整已有列的數據
本文關聯的微信視頻號短視頻: