最近预处理一些数据时遇到一个问题,我想利用一个循环,每次从一个dataframe中选取特定的数据,再把这些数据重新组合成为一个新的dataframe,但网上很多关于pandas或者numpy的教程中都很少有讨论过如何实现这样的功能,然而我觉得实际数据预处理过程中却是会经常遇到这种问题的,于是把自己的心得记录下来和大家分享。
我主要参考了这个链接中的内容 https://vimsky.com/article/3717.html
首先感觉很多人的第一反应会是直接建立一个空列表或者空矩阵,每次循环时利用append函数把新的数据添加到末尾,但是这种方式效率是非常低的,因为每一次循环程序都需要重新分配内存,会浪费非常多的时间,完全违背了numpy和pandas高效的特性,正确的做法应该是预先建立一个和最终数据形状相同或者更大的零矩阵,利用索引的方式在每次循环中更新数据,下面利用代码验证两种方式的差异。
import numpy as np
import pandas as pd
import time
df=pd.read_pickle('pid')
start=time.time()
sss=np.zeros([1550,7])
for i in range(1549):
a=pd.concat((df.iloc[i,2:4],df.iloc[i+1,4:7],df.iloc[i+1,2:4]))
sss[i]=a
end=time.time()
print('the time of use method_