Pandas遍歷DataFrame每一行的多種方法
在 Pandas 中,遍歷 DataFrame 的每一行有多種方法,每種方法適用于不同的場(chǎng)景。以下是常見的幾種方式及其適用場(chǎng)景:
1. iterrows() - 返回索引和行數(shù)據(jù)(Series)
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['x', 'y', 'z']})
for index, row in df.iterrows():
print(f"索引: {index}, A列值: {row['A']}, B列值: {row['B']}")
特點(diǎn):
- 返回
(index, Series)對(duì),row是 Pandas Series 對(duì)象。 - 缺點(diǎn):性能較差(因?yàn)?
row是 Series,不是原生 Python 類型)。 - 適用場(chǎng)景:需要訪問行索引和少量數(shù)據(jù)時(shí)。
2. itertuples() - 返回命名元組(更快)
for row in df.itertuples():
print(f"索引: {row.Index}, A列值: {row.A}, B列值: {row.B}")
特點(diǎn):
- 返回
namedtuple,訪問列名更方便(如row.A而不是row['A'])。 - 優(yōu)點(diǎn):比
iterrows()快很多(因?yàn)橹苯硬僮髟M)。 - 適用場(chǎng)景:需要高性能遍歷,且不需要修改數(shù)據(jù)。
3. apply() - 對(duì)每行應(yīng)用函數(shù)(推薦)
def process_row(row):
return f"A={row['A']}, B={row['B']}"
df.apply(process_row, axis=1) # axis=1 表示按行應(yīng)用
特點(diǎn):
- 使用向量化操作,比
iterrows()/itertuples()更快。 - 適用場(chǎng)景:需要對(duì)每行進(jìn)行計(jì)算并返回新數(shù)據(jù)。
4. items() - 遍歷列(而非行)
for col_name, col_data in df.items():
print(f"列名: {col_name}")
print(f"列數(shù)據(jù):\n{col_data}")
特點(diǎn):
- 遍歷的是 列 而不是行。
- 適用場(chǎng)景:需要按列處理數(shù)據(jù)時(shí)。
5. 直接轉(zhuǎn)換為 NumPy 數(shù)組(最快)
for row in df.values: # 或 df.to_numpy()
print(f"A={row[0]}, B={row[1]}") # 按列索引訪問
特點(diǎn):
- 直接操作 NumPy 數(shù)組,速度最快。
- 缺點(diǎn):丟失列名,只能按索引訪問。
- 適用場(chǎng)景:需要極致性能,且不需要列名。
6. 使用 loc 或 iloc 訪問特定行
for i in range(len(df)):
print(df.loc[i, 'A']) # 按標(biāo)簽訪問
print(df.iloc[i, 0]) # 按位置訪問
特點(diǎn):
- 適用于隨機(jī)訪問特定行。
- 缺點(diǎn):性能較差(每次調(diào)用
loc/iloc都有開銷)。
性能對(duì)比
| 方法 | 速度 | 適用場(chǎng)景 |
|---|---|---|
| itertuples() | ???? | 高性能遍歷 |
| apply() | ??? | 向量化操作 |
| iterrows() | ? | 需要索引時(shí) |
| df.values | ????? | 極致性能(無列名) |
| loc / iloc | ? | 隨機(jī)訪問 |
最佳實(shí)踐
- 盡量避免逐行遍歷,優(yōu)先使用 Pandas 的向量化操作(如
df['A'] * 2)。 - 如果必須遍歷:
- 需要列名 →
itertuples() - 需要極致性能 →
df.values或to_numpy() - 需要修改數(shù)據(jù) →
iterrows()或apply()
- 需要列名 →
- 大數(shù)據(jù)處理:考慮
dask或swifter加速。
示例:修改 DataFrame 的某一列
# 方法1:使用 iterrows()(不推薦,慢)
for index, row in df.iterrows():
df.loc[index, 'B'] = row['B'] + '_modified'
# 方法2:使用 apply()(推薦)
df['B'] = df['B'].apply(lambda x: x + '_modified')
# 方法3:向量化操作(最快)
df['B'] = df['B'] + '_modified'
總結(jié)
| 需求 | 推薦方法 |
|---|---|
| 高性能遍歷 | itertuples() |
| 需要修改數(shù)據(jù) | apply() 或 iterrows() |
| 極致性能 | df.values |
| 向量化計(jì)算 | 直接使用 Pandas/NumPy 操作 |
盡量避免逐行遍歷,Pandas 的優(yōu)勢(shì)在于 向量化計(jì)算!
到此這篇關(guān)于Pandas遍歷DataFrame每一行的多種方法的文章就介紹到這了,更多相關(guān)Pandas遍歷DataFrame每一行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中Socket編程底層原理解析與應(yīng)用實(shí)戰(zhàn)
Socket編程是網(wǎng)絡(luò)通信的基礎(chǔ),Python通過內(nèi)置的socket模塊提供了強(qiáng)大的網(wǎng)絡(luò)編程接口,本文將結(jié)合實(shí)際案例,詳細(xì)介紹Python中Socket編程的基本概念、常用方法和實(shí)際應(yīng)用,需要的朋友可以參考下2024-08-08
Python并行編程多線程鎖機(jī)制Lock與RLock實(shí)現(xiàn)線程同步
這篇文章主要為大家介紹了Python并行編程多線程鎖機(jī)制Lock與RLock實(shí)現(xiàn)線程同步示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Windows自動(dòng)化重啟python腳本的方法詳解
小編最近遇到一個(gè)需求,每天都需要定時(shí)重啟一個(gè)python腳本,這個(gè)腳本是跑在windows電腦上的,本文小編整理了三個(gè)實(shí)用的方法,大家可以參考一下2025-04-04
Pytorch Conda環(huán)境下載慢換源/刪源/恢復(fù)默認(rèn)源的簡(jiǎn)單操作
隨著實(shí)驗(yàn)增多,需要分割創(chuàng)建環(huán)境的情況時(shí)有出現(xiàn),在此情況下使用conda create --name xx python=3.10 pytorch torchvision pytorch-cuda -c nvidia -c pytorch -y這樣的指令創(chuàng)建時(shí)如果不換源,往往下載速度很慢,本文介紹了解決辦法,需要的朋友可以參考下2024-07-07
Django模板報(bào)TemplateDoesNotExist異常(親測(cè)可行)
這篇文章主要介紹了Django模板報(bào)TemplateDoesNotExist異常(親測(cè)可行),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
python django 增刪改查操作 數(shù)據(jù)庫(kù)Mysql
下面小編就為大家?guī)硪黄猵ython django 增刪改查操作 數(shù)據(jù)庫(kù)Mysql。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
Python中XML轉(zhuǎn)JSON、XML轉(zhuǎn)字典代碼示例
大家都知道python的字典和json類似,那么可不可以先將xml轉(zhuǎn)換成json再去做其他的事情呢,下面這篇文章主要給大家介紹了關(guān)于Python中XML轉(zhuǎn)JSON、XML轉(zhuǎn)字典的相關(guān)資料,需要的朋友可以參考下2024-02-02
python通過偽裝頭部數(shù)據(jù)抵抗反爬蟲的實(shí)例
下面小編就為大家分享一篇python通過偽裝頭部數(shù)據(jù)抵抗反爬蟲的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
pytest進(jìn)階教程之fixture函數(shù)詳解
這篇文章主要給大家介紹了關(guān)于pytest進(jìn)階教程之fixture函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

