原文鏈接:https://www.cnblogs.com/math98/p/9769496.html
現有一個數據框pandas的dataframe:
import pandas as pd inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}] df = pd.DataFrame(inp) print(df)
期望輸出
c1 c2
0 10 100
1 11 110
2 12 120
現在我想遍歷這個數據框的每一行, 在每一行當中我想通過列名訪問第一行的每一個元素,例如,實現以下效果:
for row in df.rows: print(row['c1'], row['c2'])
方法一:iterrows(),將DataFrame迭代為(insex, Series)對,效率低,不推薦
返回行Series,100W行數據:1分鍾12s,時間花費在類型檢查
這個函數同時返回 索引和行對象的生成器可以直接進行遍歷
for index, row in df.iterrows(): print(index, row['c1'], row['c2'])#字典方式訪問
其中index遍歷的是索引列的值,可以直接訪問索引
方法二:itertuples(),將DataFrame迭代為元祖,效率高,推薦使用
返回行namedtuple,100W行數據:1.78s,時間花在構建namedtuple
用getattr()訪問
student = pd.read_excel('學生ID.xls') for row in student.itertuples(): # print(row) print(row.Index, row.學生姓名, row.賬號, row.密碼) print(row.Index, getattr(row,'學生姓名'), getattr(row,'賬號'), getattr(row,'密碼')) break
方法三:for + zip,效率最高,無Index
返回原生元組,100W行數據:1.01s,原生tuple的性能
for A, B in zip(df['A'], df['B']): print(A, B) break