Pandas遍歷DataFrame每一行的多種方法
在 Pandas 中,遍歷 DataFrame 的每一行有多種方法,每種方法適用于不同的場景。以下是常見的幾種方式及其適用場景:
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 類型)。 - 適用場景:需要訪問行索引和少量數(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)。 - 適用場景:需要高性能遍歷,且不需要修改數(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()更快。 - 適用場景:需要對(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):
- 遍歷的是 列 而不是行。
- 適用場景:需要按列處理數(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):丟失列名,只能按索引訪問。
- 適用場景:需要極致性能,且不需要列名。
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ì)比
| 方法 | 速度 | 適用場景 |
|---|---|---|
| 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)勢在于 向量化計(jì)算!
到此這篇關(guān)于Pandas遍歷DataFrame每一行的多種方法的文章就介紹到這了,更多相關(guān)Pandas遍歷DataFrame每一行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Python的Flask框架中實(shí)現(xiàn)單元測試的教程
這篇文章主要介紹了在Python的Flask框架中實(shí)現(xiàn)單元測試的教程,屬于自動(dòng)化部署的方面,可以給debug工作帶來諸多便利,需要的朋友可以參考下2015-04-04
Win10+python3.6+git運(yùn)行出現(xiàn)問題的解決
這篇文章主要介紹了Win10+python3.6+git運(yùn)行出現(xiàn)問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Python任務(wù)調(diào)度模塊APScheduler使用
這篇文章主要介紹了Python任務(wù)調(diào)度模塊APScheduler使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Python爬蟲實(shí)現(xiàn)百度圖片自動(dòng)下載
這篇文章主要介紹了Python爬蟲實(shí)現(xiàn)百度圖片自動(dòng)下載的方法以及相關(guān)代碼分析,對(duì)此有興趣的朋友參考下。2018-02-02

