cuDF中DataFrameResampler无interpolate属性问题咨询
解决cuDF DataFrameResampler无interpolate属性的问题
问题本质
cuDF的DataFrameResampler对象并未实现与pandas一致的interpolate方法,同时你的原cuDF函数存在一处变量名错误:cudf.to_datetime(df[datetime_column])中误用了df(函数参数为gdf),这会触发额外的KeyError。
修正后的实现方案
通过先生成目标频率的完整时间索引,再用reindex对齐数据后执行插值,替代原pandas风格的链式调用:
def g_resample_and_interpolate(gdf, datetime_column): # 修正变量名错误,转换datetime列格式并设置索引 gdf[datetime_column] = cudf.to_datetime(gdf[datetime_column]) gdf = gdf.set_index(datetime_column) # 生成1分钟频率的完整时间序列索引(覆盖原数据的时间范围) min_time = gdf.index.min() max_time = gdf.index.max() minute_index = cudf.date_range(start=min_time, end=max_time, freq='1T') # 重索引到分钟级,自动填充NaN,然后执行线性插值 gdf_resampled = gdf.reindex(minute_index).interpolate(method='linear') # 按小时重采样,取每个小时第一个值后前后填充 resampled_gdf = gdf_resampled.resample('1H').first().ffill().bfill() # 重置索引恢复datetime列 resampled_gdf = resampled_gdf.reset_index() return resampled_gdf
关键步骤说明
- 生成完整分钟索引:用
cudf.date_range生成覆盖原数据时间范围的1分钟间隔索引,确保所有时间点都被包含。 - 重索引+插值:通过
reindex将原数据对齐到分钟索引,缺失值自动设为NaN,之后直接调用DataFrame的interpolate方法执行线性插值(cuDF的DataFrame原生支持此方法)。 - 修正变量名错误:将原函数中
cudf.to_datetime(df[datetime_column])的df改为gdf,避免变量未定义的错误。
验证调用
确保调用时传入的是cuDF DataFrame对象:
g_resample_and_interpolate(gdf_dict[20000019], 'charttime')
内容的提问来源于stack exchange,提问作者Muhammad Ikhwan Perwira
相关产品推荐
相关产品推荐

