我有一个像这样的CSV文件。这个文件大约有200万行
2020/03/05 14:59:12.093,92.7884,93.8238
2020/03/05 14:59:14.571,97.1114,51.3926
2020/03/05 14:59:16.035,56.1351,62.6697
2020/03/05 14:59:16.992,90.3412,64.8728
:
我想创建pandas数据帧,以便每个数据帧有2分钟的跨度和20秒的滑动时间,如下所示
DataFrame1:
2020/03/05 14:59:12.093,92.7884,93.8238
2020/03/05 14:59:14.571,97.1114,51.3926
2020/03/05 14:59:16.035,56.1351,62.6697
:
2020/03/05 15:01:11.652,90.6966,37.9923
2020/03/05 15:01:11.918,35.8304,1.04157
DataFrame2:
2020/03/05 14:59:33.086,85.2834,57.327
2020/03/05 14:59:34.373,94.0521,33.8809
2020/03/05 14:59:38.752,36.8084,37.9878
:
2020/03/05 15:01:33.090,70.4679,54.3437
等等
我知道我可以用下面的代码来实现这一点
df = pd.read_csv(file_name, header=None, names=['time', 'colA', 'colB'])
df['time'] = pd.to_datetime(df['time'], format=r'%Y/%m/%d %H:%M:%S.%f')
df = df.set_index('time')
extracted_dfs = []
startdatetime = df.index[0]
enddatetime = df.index[len(df)-1]
curdatetime = startdatetime
while curdatetime < enddatetime:
extracted_df = df[curdatetime:curdatetime + pd.Timedelta(seconds=120)].copy()
extracted_dfs.append(extracted_df)
curdatetime = curdatetime + pd.Timedelta(seconds=20)
但是这个代码非常慢。大约需要30秒。 我怎样才能做得更快
我在我的2.67GHz笔记本电脑上的时间不到6秒。 在24小时内使用了2M行并提取了4320个dfs,我猜这是一个足够好的规模测试
似乎我们把
curdatetime + pd.Timedelta()
从循环中去掉,节省了很多时间输出
相关问题 更多 >
编程相关推荐