Python Pandas 列數據篩選方法匯總
Pandas 列數據篩選方法匯總
數據準備:
import pandas as pd
# 假設有 5 個人,分別參加了 4 門課程,獲得了對應的分數
data = {'name' : pd.Series(['Alice', 'Bob', 'Cathy', 'Dany', 'Ella']),
'Math_A' : pd.Series([1.1, 2.2, 3.3, 4.4, 5]),
'English_A' : pd.Series([3, 2.6, 2, 1.7, 3]),
'Math_B' : pd.Series([1.7, 2.5, 3.6, 2.4, 5]),
'English_B' : pd.Series([5, 2.6, 2.4, 1.3, 3]),
}
df = pd.DataFrame(data)
print(df)
** 運行結果:**
name Math_A English_A Math_B English_B
0 Alice 1.1 3.0 1.7 5.0
1 Bob 2.2 2.6 2.5 2.6
2 Cathy 3.3 2.0 3.6 2.4
3 Dany 4.4 1.7 2.4 1.3
4 Ella 5.0 3.0 5.0 3.0
一、篩選得到指定的列
1.1 根據 label 選擇特定的幾列
print(df[['name', 'Math_A', 'Math_B']])
# 注意這裡是 雙重 []
運行結果:
name Math_A Math_B
0 Alice 1.1 1.7
1 Bob 2.2 2.5
2 Cathy 3.3 3.6
3 Dany 4.4 2.4
4 Ella 5.0 5.0
1.2 選擇單列的兩種方式
print(df['name'])
# 注意這裡就是 單 []
print(df.name)
運行結果:
0 Alice
1 Bob
2 Cathy
3 Dany
4 Ella
Name: name, dtype: object
0 Alice
1 Bob
2 Cathy
3 Dany
4 Ella
Name: name, dtype: object
1.3 通過正則表達式選擇列
print(df.filter(regex='B$'))
# 選擇以 'B' 為結尾的 label
運行結果:
Math_B English_B
0 1.7 5.0
1 2.5 2.6
2 3.6 2.4
3 2.4 1.3
4 5.0 3.0
常用正則表達式:
二、同時對 行 和 列 進行篩選
2.1 通過切片 df.loc[ : , : ]
print(df.loc[:2,'English_A':'English_B'])
# 注意,這裡的切片 與 Python 本身的不同,包含了結尾!
# 所以這個例子中包含了 第 2 行 和 'English_B' 列
運行結果:
English_A Math_B English_B
0 3.0 1.7 5.0
1 2.6 2.5 2.6
2 2.0 3.6 2.4
2.2 通過選擇 序號 選擇列 df.iloc[ : , : ]
print(df.iloc[:2 , [0,3]])
# 注意,這裡的切片沒有包含第 2 行!同時選擇了 第 0 列 和 第 3 列
# 如果想要 同時選擇 0~3 列(共4列),要使用 :4
運行結果:
name Math_B
0 Alice 1.7
1 Bob 2.5
2.3 對 特定 列的數據進行邏輯篩選
print(df.loc[df['English_A'] > 2, ['name', 'English_A']])
# 這裡我希望查看 'English_A' 這個科目分數 2 分以上有哪些人
運行結果:
name English_A
0 Alice 3.0
1 Bob 2.6
4 Ella 3.0