[轉]DataFrame行遍歷


原文鏈接: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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM