Pandas——Dataframe行遍历几种常用方法性能分析

405 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

pandas作为python数据分析的第一大利器,是我们广大数据分析人员经常使用的一个工具。然而,我今天无意中,竟然听到美女同事吐槽说:dataframe处理数据好慢啊,还不如excel!什么,are you kidding me,这立马就引起了我这个资深数据人的注意,立马跑过去帮美女同事处理一下,仔细一看,原来是使用的方法的问题。

举一个在平常的工作非常常见的例子————按照行去遍历读取整个数据集!面对这个场景,对于一个从sql boy转到数据分析的人来说,那不得马上来他一个select查询:

 select * from table1;

来看看数据的大概情况。

而这一操作用pandas的方法实现主要有以下几种:

1、iterrows()

iterrows()方法的原理是将Dataframe迭代为Series,然后再返回结果。在这一过程中需要进行数据类型检查,所以,需要花费很长的时间。 (不建议使用)

代码如下:

for index, row in df.iterrows():
     #字典方式访问
     print(index, row['c1'], row['c2'])

2、itertuples()

itertuples()方法的原理是将Dataframe迭代为tuple,再进行返回,由于元组这个类型具有不可变的特性,所以,此过程不需要进行类型检查。 (效率高,推荐使用)

代码如下:

for row in student.itertuples():
    # print(row)
    print(row.Index, row.name, row.account, row.pwd)
    print(row.Index, getattr(row,'name'), getattr(row,'account'), getattr(row,'pwd'))
    

3、for + zip

这种方法是直接手动构造原生tuple,无需关心index数据,从根本上解决底层类型检查耗时的问题。 (效率高,推荐使用)

具体实现代码如下:

for A, B in zip(df['A'], df['B']):
    print(A, B)