[转]DataFrame行遍历

pandas中dataframe行遍历

现有一个数据框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

 

 

上一篇:vue element ui table 自动无限滚动组件


下一篇:python使用xlrd,xlwt,xlutils读写文件