網站首頁 編程語言 正文
1.什么是label
pandas處理數據時,我們會經常看到dataframe結構使用loc, iloc, ix等方法。那么這些方法到底有啥區別,下面我們來進行詳細分析。
首先我們先明確一點,這幾個方法都可以用來過濾dataframe的行列。他們的不同,主要還是使用方式的不同。
在分析之前,我們先來明確一下標簽label的概念。為了方便看得更清楚,先構造一個數據集
import pandas as pd
def test_loc():
name = ['n1', 'n2', 'n3', 'n4', 'n5', 'n6']
age = [1, 2, 3, 4, 5, 6]
country = ['Chi', 'Chi', 'Ame', 'Ame', 'Jp', 'Koe']
city = ['bj', 'sh', 'ny', 'ny', 'tok', 'se']
data = pd.DataFrame({'name': name, 'age': age, 'country': country, 'city': city})
# label
print(data)
name age country city
0 n1 1 Chi bj
1 n2 2 Chi sh
2 n3 3 Ame ny
3 n4 4 Ame ny
4 n5 5 Jp tok
5 n6 6 Koe se
上面的data,0,1,2,3,4,5為索引,就是我們的行標簽。name ,age,country,city為列名,則是我們的列標簽。
2.loc用法
我們先直接上結論:loc可以基于行列標簽對數據進行篩選。
下面通過實驗來說明。
def test_loc():
name = ['n1', 'n2', 'n3', 'n4', 'n5', 'n6']
age = [1, 2, 3, 4, 5, 6]
country = ['Chi', 'Chi', 'Ame', 'Ame', 'Jp', 'Koe']
city = ['bj', 'sh', 'ny', 'ny', 'tok', 'se']
data = pd.DataFrame({'name': name, 'age': age, 'country': country, 'city': city})
# 取前幾行
print(data.loc[[0, 1, 2]])
print()
print(data.loc[0:2])
print()
# 取某幾列
print(data.loc[:, ['name', 'age', 'city']])
print()
# 取幾行幾列
print(data.loc[0:2,['name', 'age', 'city']])
print()
2.1 選擇行
loc的整體語法為loc[rows, columns]。逗號前面部分為選擇的行,后面部分為選擇的列,":"表示全選。
loc[0:2]與loc[[0, 1, 2]]的效果一致,都是表示選取前3行,可以認為此時是通過行標簽選擇數據。
2.2 選擇列
實際操作中,最常見的需求就是選擇某幾列而不是所有數據。loc[:, [‘name’, ‘age’, ‘city’]]就是選擇散列,逗號前面的:表示選擇所有行。
2.3 選擇指定的行列
data.loc[0:2,[‘name’, ‘age’, ‘city’]]這種用法,意思就是選擇前三行的name,age,city這三列。
2.4 loc小結
1.就像我們一開始提到的,loc是基于數據行列標簽對數據進行篩選。
2.針對行標簽選擇時,如果index是默認的整數序列,選擇的時候包括了末端的一行。
3.":"表示選擇所有行或者所有列。
3.iloc用法
直接上結論:iloc與loc的不同在于,loc基于數據標簽進行篩選,而iloc基于位置進行數據篩選,i可以認為是integer,即在loc的基礎上,用integer整數當作"索引"
看個例子
def test_iloc():
name = ['n1', 'n2', 'n3', 'n4', 'n5', 'n6']
age = [1, 2, 3, 4, 5, 6]
country = ['Chi', 'Chi', 'Ame', 'Ame', 'Jp', 'Koe']
city = ['bj', 'sh', 'ny', 'ny', 'tok', 'se']
data = pd.DataFrame({'name': name, 'age': age, 'country': country, 'city': city})
# iloc的索引,不包含最后一個
print(data.iloc[0:2])
print()
#
print(data.iloc[:, 0:2])
print()
print(data.iloc[:,[0, 1, 3]])
print()
# print(data.iloc[:, ['name', 'city']])
# IndexError: .iloc requires numeric indexers, got ['name' 'city']
最后輸出為:
? name ?age country city
0 ? n1 ? ?1 ? ? Chi ? bj
1 ? n2 ? ?2 ? ? Chi ? sh? name ?age
0 ? n1 ? ?1
1 ? n2 ? ?2
2 ? n3 ? ?3
3 ? n4 ? ?4
4 ? n5 ? ?5
5 ? n6 ? ?6? name ?age city
0 ? n1 ? ?1 ? bj
1 ? n2 ? ?2 ? sh
2 ? n3 ? ?3 ? ny
3 ? n4 ? ?4 ? ny
4 ? n5 ? ?5 ?tok
5 ? n6 ? ?6 ? se
iloc[0:2],表示選擇前兩行。注意在iloc中,末端那行不包括。因為起始索引是0,所以iloc[0:2]選擇的是第0行與第1行。
data.iloc[:, 0:2]表示選擇前兩列,data.iloc[:,[0, 1, 3]]表示選擇第0,1,3列。
如果我們嘗試用列名篩選數據,data.iloc[:, [‘name’, ‘city’]]
代碼會報錯
IndexError: .iloc requires numeric indexers, got ['name' 'city']
上面的錯誤信息就很明確的告訴了我們,iloc方法需要numeric indexers。
4.ix
最后一個ix,是歷史版本的用法。ix的作用,現在用loc,iloc基本都能實現,所以ix也基本上被loc,iloc所代替,現在官方不再推薦使用。
原文鏈接:https://blog.csdn.net/bitcarmanlee/article/details/128611846
相關推薦
- 2022-11-16 Kotlin條件控制語句匯總講解_Android
- 2022-05-06 C++提取文件名與提取XML文件的方法詳解_C 語言
- 2021-12-11 Redis之sql緩存的具體使用_Redis
- 2022-11-10 詳解C++?左值引用與?const?關鍵字_C 語言
- 2022-10-16 Python?Celery動態添加定時任務生產實踐指南_python
- 2022-12-15 YOLOv5改進之添加CBAM注意力機制的方法_python
- 2024-04-07 mybatis-plus插入數據庫值無效(插入不對,沒有插入數據庫默認值,int的類型的null會變
- 2022-06-27 C#調用打印機實現打印_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支