本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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)