Pandas简明教程:四、Pandas数据索引方式
文章目錄
- 1、以類似`dict`的方式訪問
- 2、以屬性方式訪問數據
- 3、訪問行(slicing)
- 4、用`loc`方法訪問不同行列
- 5、用`iloc`方法直接訪問行列
- 6、其它方式
- 本系列教程教程完整目錄:
1、以類似dict的方式訪問
上一篇教程開頭以dict的形式實例化了第一個DataFrame,也證實了它的確可以用類似dict的方式來獲取數據:
import pandas as pd df = pd.DataFrame({'月份': [1,2,3,4,5,2,3,4,5,1,2,3,4],'姓名':['張三','張三','張三','張三','張三','李四','李四','李四','李四','王五','王五','王五','王五'],'性別':['男','男','女','女','女','男','男','男','男','女','女','女','女'],'應發工資':[2000,2000,2000,2000,2000,1800,1800,1800,1800,1800,1800,1800,1800],'實發工資':[1500,1000,15000,1500,1500,1300,1300,1300,1300,1300,1300,1300,1300],'職位':['主犯','主犯','主犯','主犯','主犯','從犯','從犯','從犯','從犯','龍套','龍套','龍套','龍套'] })df['姓名']0 張三 1 張三 2 張三 3 張三 4 張三 5 李四 6 李四 7 李四 8 李四 9 王五 10 王五 11 王五 12 王五 Name: 姓名, dtype: object在此基礎上,還可以進一步進行復雜的操作,例如
- 訪問多列:
- 當訪問時列的順序不同時:
另外,這種方式不權可以訪問數據,還可以作為索引對數據進行修改,比如交換兩個列:
df[['職位','姓名']] = df[['姓名','職位']] # 姓名和職位的對應數據發生了改變 df月份 姓名 性別 應發工資 實發工資 職位 0 1 主犯 男 2000 1500 張三 1 2 主犯 男 2000 1000 張三 2 3 主犯 女 2000 15000 張三 3 4 主犯 女 2000 1500 張三 4 5 主犯 女 2000 1500 張三 5 2 從犯 男 1800 1300 李四 6 3 從犯 男 1800 1300 李四 7 4 從犯 男 1800 1300 李四 8 5 從犯 男 1800 1300 李四 9 1 龍套 女 1800 1300 王五 10 2 龍套 女 1800 1300 王五 11 3 龍套 女 1800 1300 王五 12 4 龍套 女 1800 1300 王五2、以屬性方式訪問數據
以下代碼可能引起不適!!!!
df.職位0 張三 1 張三 2 張三 3 張三 4 張三 5 李四 6 李四 7 李四 8 李四 9 王五 10 王五 11 王五 12 王五 Name: 職位, dtype: object它居然支持中文變量名!!!!
注意:這里和dict類型的操作方式就有所不同了,如果是一個單純的dict我們來看:
mydict = {'a':1,'b':2}mydict.a --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-9-20721cfb64a6> in <module> ----> 1 mydict.aAttributeError: 'dict' object has no attribute 'a'此時報錯:dict并沒有名稱為a這個屬性。而DataFrame則提供了這樣一種索引方式。
接上一篇教程,我們知道當訪問的結果是一列時,返回的結果就變成了Series類。
3、訪問行(slicing)
df[:2]月份 姓名 性別 應發工資 實發工資 職位 0 1 主犯 男 2000 1500 張三 1 2 主犯 男 2000 1000 張三df[1:5]月份 姓名 性別 應發工資 實發工資 職位 1 2 主犯 男 2000 1000 張三 2 3 主犯 女 2000 15000 張三 3 4 主犯 女 2000 1500 張三 4 5 主犯 女 2000 1500 張三注意: 這種方式不能以單個下標進行訪問
df[2]D:\ProgramData\Anaconda3\envs\pytorch\lib\site-packages\pandas\core\frame.py in __getitem__(self, key) ...## 此處省略約10余行報錯信息KeyError: 2注意: 不能直接像訪問數組一樣訪問單個單元信息:
df[1,2] --------------------------------------------------------------------------- KeyError Traceback (most recent call last) # 省略約20余行報錯信息4、用loc方法訪問不同行列
df.loc[:2,['職位']]職位 0 張三 1 張三 2 張三而此時可以訪問單獨的一行:
df.loc[2,['職位']]職位 張三 Name: 2, dtype: object注意:loc方法第二個位置的索引必須是表頭的列表或字符串,不能是數字!
5、用iloc方法直接訪問行列
df.iloc[1,2] '男'df.iloc[1,:2]月份 2 姓名 主犯 Name: 1, dtype: objectdf.iloc[:2,1]0 主犯 1 主犯 Name: 姓名, dtype: object不難看到這時數據的訪問方式和數組等類型的訪問方式就基本一致了。
6、其它方式
舊的版本里面還有ix方法,不過新版已經沒有這項功能了,它的用法兼顧了loc和iloc方法。另外還有快速定位的方法at,iat,但這兩種方法除了速度較快以外也并沒有特別之處,因此不多敘述,有興趣的同學可以自行查詢官方文檔。
本系列教程教程完整目錄:
一、Pandas簡介與安裝
二、Pandas基本數據結構-DataFrame與Series
三、Pandas文件讀寫
四、Pandas數據索引方式
五、Pandas簡單統計操作及通用方式
六、Pandas條件查詢
七、Pandas缺失數據的處理(數據清洗基礎)
八、Pandas數據透視表
九、表的合并、連接、拼接(數據聚合基礎)
總結
以上是生活随笔為你收集整理的Pandas简明教程:四、Pandas数据索引方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pandas简明教程:二、Pandas基
- 下一篇: Pandas简明教程:三、Pandas文