start_time = time.time() othercon = 'Profile_Time >= "{}" and Profile_Time <"{}" and high_level > 338'.format(desday,tom_dt.strftime('%Y-%m-%d')) # apro_df 是[latitude,longitude,time,high_level,features]的格式,但是高度还没有std apro_ori, apro_df, apro_xr = get_apro_data_sql(con, apro_config, othercon, pos_merge=pos_df, multi_index=multi_index + ['high_level']) print('THE COST to get raw data table:',time.strftime("%H: %M: %S",time.gmtime(time.time() - start_time))) # TODO: 可能查不到数据,判断一下 if apro_df.shape[0] == 0: # 修改列名即可 apro_final_df = apro_df apro_final_df.rename(columns={'high_level':'Level'},inplace=True) print('THE {} DAY HAS NO APRO DATA'.format(desday)) else: # 高度标准化 apro_df['Level'] = apro_df.apply(apro_get_level, axis=1) apro_df = apro_df.drop(['high_level'], axis=1) apro_xr = apro_df.set_index(['Time', 'Latitude', 'Longitude', 'Level']).to_xarray() # 插值等 # 2. 插值 _, _, times, tlabels = get_apro_interp_attr(apro_xr, std_index_3d, desday,posrange) # 时间 apro_mean_xr = apro_xr.groupby_bins('Time', bins=times, labels=tlabels).mean('Time').rename( {'Time_bins': 'Time'}) # 位置 apro_mean_xr['Latitude'] = apro_mean_xr.Latitude.values.round(1) apro_mean_xr['Longitude'] = apro_mean_xr.Longitude.values.round(1) apro_mean_df = apro_mean_xr.to_dataframe().dropna(how='all').reset_index() # 最后 apro_final_df = apro_mean_df.groupby(['Time', 'Latitude', 'Longitude', 'Level']).mean().dropna(how='all') # apro_final_xr = apro_final_df.to_xarray() apro_final_df = apro_final_df.reset_index() # 修改时间 apro_final_df.Time = pd.to_datetime(apro_final_df['Time']) apro_final_df.Time = apro_final_df['Time'].apply(lambda x:x.replace(year=2023)) # Todo: 可以改成输入的年份 # 输出中间文件,可能是空文件 desday = desday.replace('2017','2023') outfile = os.path.join(apro_config.outpath,"apro_mid_{}.csv".format(desday)) apro_final_df.to_csv(outfile,index=False)
时间: 2024-04-18 11:27:54 浏览: 166
这段代码执行了一系列处理apro_df数据的步骤。让我逐一解释一下:
首先,代码使用time.time()获取当前时间,并将其保存在start_time变量中。然后,根据desday和tom_dt生成一个查询条件othercon。
接下来,代码调用get_apro_data_sql函数,从数据库中获取apro_ori、apro_df和apro_xr这三个变量的值。这个函数可能根据给定的条件和配置从数据库中检索数据,并进行一些处理。pos_merge参数可能是将pos_df与查询到的数据进行合并。
然后,代码使用time.time()计算获取原始数据表所花费的时间,并打印出来。
接下来,代码检查apro_df的形状是否为0。如果为0,则说明没有查询到数据,将apro_final_df设置为apro_df,并进行列名修改。然后打印出该日期没有apro数据的消息。
如果apro_df的形状不为0,则进行下一步处理。首先,代码使用apro_get_level函数对apro_df中的'high_level'列进行处理,标准化高度并将结果保存在'Level'列中。然后,删除'high_level'列,并使用set_index函数将apro_df转换为xarray格式的apro_xr。
接下来,代码调用get_apro_interp_attr函数,根据给定的参数和配置,计算插值所需的属性。
然后,代码使用groupby_bins函数对apro_xr进行分组,并计算每个时间段的平均值。然后,对Latitude和Longitude进行取舍,将结果保存在apro_mean_df中。
接下来,代码使用groupby函数对apro_mean_df进行分组,并计算每个组的平均值,然后删除所有NaN值。最后,对apro_final_df进行重置索引,并将'Time'列的数据类型更改为datetime。
最后,代码根据desday生成输出文件的路径,并将apro_final_df保存为CSV文件。
这段代码的作用可能是对查询到的原始数据进行一些处理,如标准化高度、插值等,并将结果保存为中间文件。如果有关于这段代码的更多细节或其他问题,请告诉我。
阅读全文