玩转pandas取数_下
公眾號:尤而小屋
作者: Peter
編輯:Peter
大家好,我是Peter~
這將是DataFrame數據篩選的最后一篇文章,重點介紹的是3對函數的使用:
- iloc和loc,最為重要,經常使用的一對函數
- at和iat
- any和all
重要學習資料:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html,pandas官網各種例子帶你學習。
擴展閱讀
Pandas取數的方法真的是五花八門,有很多的函數和技巧需要我們去掌握和自己平時積累。之前的2篇文章分別是:
- 各種騷氣的pandas取數操作-上
- 五花八門的padans取數操作-中
模擬數據
本文中模擬了兩份數據:
- 第一份的索引為字符類型
- 第二份的索引使用的是默認數值型
iloc和loc
iloc是通過數值來進行篩選,loc是通過屬性或者行索引名來進行篩選
iloc
直接指定數值,取出單行記錄
# 1、使用數值df1 = df.iloc[1] # 單個數值取出的行記錄 df1# 結果 name 小王 sex 女 age 23 score 600.0 address NaN Name: 1, dtype: object使用冒號表示全部
df1 = df.iloc[1,:] # :冒號表示全部 df1# 結果 name 小王 sex 女 age 23 score 600.0 address NaN Name: 1, dtype: object還可以使用切片來取數:
df1 = df.iloc[:3] # 取出前3行記錄 df1取出非連續的多行記錄:
df2 = df.iloc[[1,2,4]] # 取出多行記錄 df2| 小王 | 女 | 23 | 600.0 | NaN |
| 張菲 | 女 | 18 | 550.0 | 湖南省長沙市雨花區 |
| 孫小小 | 女 | 25 | 610.0 | 廣東省廣州市白云區 |
在行和列方向上同時使用切片,還可以指定步長:
# 4、行和列方向同時使用切片df7 = df.iloc[0:4,0:6:2] df7和原數據進行對比一下:
!!!一個非常有用的方法:np.r_,幫助我們取出非連續的列屬性
# 5、取出不連續的行列數據,使用np.r_df8 = df.iloc[:, np.r_[0,2:4]] df8| 小明 | 20 | NaN |
| 小王 | 23 | 600.0 |
| 張菲 | 18 | 550.0 |
| 關宇 | 21 | NaN |
| 孫小小 | 25 | 610.0 |
| 王建國 | 21 | 580.0 |
| 劉蓓 | 24 | 634.0 |
| 小明 | 男 | 20 | NaN | 廣東省深圳市南山區 |
| 張菲 | 女 | 18 | 550.0 | 湖南省長沙市雨花區 |
| 關宇 | 男 | 21 | NaN | 北京市東城區 |
loc
使用的行索引名或者列屬性直接來取數
# 1、取出單個列df10 = df.loc[:,"name"] df10 0 小明 1 小王 2 張菲 3 關宇 4 孫小小 5 王建國 6 劉蓓 Name: name, dtype: object # 2、取數多個列df11 = df.loc[:,["name","age"]] df11 # 3、使用數值,取出第一行,索引為0df12 = df.loc[0] df12name 小明 sex 男 age 20 score NaN address 廣東省深圳市南山區 Name: 0, dtype: object # 4、取出索引為0,1,3的行記錄,此時列字段是全部保留df13 = df.loc[[0,1,3]] df13 # 使用冒號:,表示全部列,效果同上df14 = df.loc[[0,1,3],:] df14 # 5、取出部分行和部分列df15 = df.loc[[0,1,3],["name","sex","score"]] df15 # 6、!!!使用索引切片:同時包含起止位置df16 = df.loc[0:3] df16 df.loc[:] # 表示所有數據 # 7、列篩選的時候,必須有行元素# 所有行的name和score兩列 df17 = df.loc[:,["name","score"]] df17| 小明 | NaN |
| 小王 | 600.0 |
| 張菲 | 550.0 |
| 關宇 | NaN |
| 孫小小 | 610.0 |
| 王建國 | 580.0 |
| 劉蓓 | 634.0 |
| 20 | NaN | 廣東省深圳市南山區 |
| 23 | 600.0 | NaN |
| 18 | 550.0 | 湖南省長沙市雨花區 |
| 21 | NaN | 北京市東城區 |
| 25 | 610.0 | 廣東省廣州市白云區 |
| 21 | 580.0 | 湖北省武漢市江夏區 |
| 24 | 634.0 | 廣東省深圳市龍華區 |
| 23 | 600.0 | NaN |
| 18 | 550.0 | 湖南省長沙市雨花區 |
| 21 | NaN | 北京市東城區 |
| 101 | 102 | 140 |
| 101 | 102 | 140 |
| 87 | 128 | 117 |
| 101 | 140 |
| 87 | 117 |
| 101 | 102 | 140 |
| 87 | 128 | 117 |
兩者對比
df.loc[[1,2]]| 小王 | 女 | 23 | 600.0 | NaN |
| 張菲 | 女 | 18 | 550.0 | 湖南省長沙市雨花區 |
| 小王 | 女 | 23 | 600.0 | NaN |
| 張菲 | 女 | 18 | 550.0 | 湖南省長沙市雨花區 |
| 小王 | 600.0 |
| 張菲 | 550.0 |
| 小王 | 600.0 |
| 張菲 | 550.0 |
at和iat
at
at函數類似于loc,但是at函數取出的僅僅是一個值
df22 = df.at[4,"sex"] df22'女' df.at[2,"name"]'張菲' df0| 101 | 102 | 140 |
| 114 | 95 | 67 |
| 87 | 128 | 117 |
| 小明 | 男 | 20 | NaN | 廣東省深圳市南山區 |
| 小王 | 女 | 23 | 600.0 | NaN |
| 張菲 | 女 | 18 | 550.0 | 湖南省長沙市雨花區 |
| 關宇 | 男 | 21 | NaN | 北京市東城區 |
| 孫小小 | 女 | 25 | 610.0 | 廣東省廣州市白云區 |
| 王建國 | 男 | 21 | 580.0 | 湖北省武漢市江夏區 |
| 劉蓓 | 女 | 24 | 634.0 | 廣東省深圳市龍華區 |
iat
和iloc一樣,僅僅支持對數字索引操作
df24 = df.iat[2,4] df24'湖南省長沙市雨花區' df.loc[2].iat[4]'湖南省長沙市雨花區' df.iloc[2].iat[4]'湖南省長沙市雨花區'any和all
- any:如果至少有一個為True,則為True
- all:需要所有結果為True,才會為True
當傳入的axis=1,會按照行進行查詢;axis=0表示按照列查詢
在Series數據的比較
# 兩個False通過any結果為Falsepd.Series([False, False]).any() # False pd.Series([True, False]).any() # True pd.Series([True, False]).all() # False # any:是否跳過空值pd.Series([np.nan]).any() # False pd.Series([np.nan]).any(skipna=False) # True # all:是否跳過空值pd.Series([np.nan]).all() # True pd.Series([np.nan]).all(skipna=False) #True在DataFrame的比較
df0| 101 | 102 | 140 |
| 114 | 95 | 67 |
| 87 | 128 | 117 |
| 101 | 102 |
| 114 | 95 |
| 87 | 128 |
| True | True |
| True | False |
| False | True |
any
# 3、使用any函數篩選df0[(df0.loc[:,["小明","小紅"]] >= 100).any(1)]all
只有語文同時滿足3個人都大于100
# 4、使用all函數篩選:只有語文滿足3個人同時大于100df0[(df0.loc[:,["小明","小紅"]] >= 100).all(1)]總結
本文通過模擬的數據介紹了pandas的3對函數使用。其中loc和iloc函數是十分常用和實用的函數,自己經常會使用。至此,pandas的數據篩選部分已經全部介紹完成。
當然介紹的方法只是pandas豐富取數技巧中的部分,還有很多的函數和方法需要讀者自己平時去學習和積累,希望介紹的方法對大家有所幫助。
從下一篇文章開始,將會介紹Pandas中的各種操作技巧。
總結
以上是生活随笔為你收集整理的玩转pandas取数_下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态切换 web 报表中的统计图类型
- 下一篇: 《管理者必读12篇》:如何做好人员管理?