基于日期时间索引的掩码数据帧列

2024-10-01 19:33:27 发布

您现在位置:Python中文网/ 问答频道 /正文

this question非常相似,只是我需要同时考虑日期和时间;indexer_between_time似乎不支持我能找到的任何日期时间格式。在

我有一个dask数据帧,如下所示:

                     logger_volt        lat     lon
time                                               
2017-01-01 00:01:20      12.0112  37.150902 -98.362
2017-01-01 00:01:40      12.0113  37.150902 -98.362
2017-01-01 00:02:00      12.0057  37.150902 -98.362
2017-01-01 00:02:20      12.0113  37.150902 -98.362
2017-01-01 00:02:40      12.0058  37.150902 -98.362
2017-01-01 00:03:00      12.0113  37.150902 -98.362

以及以python元组的形式或列表形式在特定时间范围内屏蔽的列列表(这些范围中的数据被认为是“坏的”,应该在那里返回None):

^{pr2}$

期望结果:

^{3}$

非工作代码:

dqrs = [   # var       start of mask           end of mask
    ('lat', '2017-01-01 00:01:40', '2017-01-01 00:02:00'),
    ('lon', '2017-01-01 00:02:40', '2017-01-01 00:03:00'),
]
df = xarray.open_dataset('filename.cdf').to_dask_dataframe()

dqr_mask = (df == df) | df.isnull()  # create a dummy mask that's all True
for var, start, end in dqrs:
    dqr_mask |= ((df.columns == var) & (df.index >= start) & (df.index >= end))

df = df.mask(dqr_mask).compute()

其他方法的问题:

  • Dask数据帧还没有实现片分配,因此类似df[start:end] = None的方法不适用于此

Tags: 数据nonedf列表timevar时间mask
1条回答
网友
1楼 · 发布于 2024-10-01 19:33:27

您只需选择要修改的循环fordqr_maskvar列。有一种方法:

dqr_mask = df != df # you want a mask set to False where there is a value
for var, start, end in dqrs:
    #set to True the column var when index is between start and end
    dqr_mask[var] |= (df.index >= start) & (df.index <= end) 
# where dqr_mask False it keeps df otherwise it set the value to None
df = df.mask(dqr_mask,other=None)

print (df)
                    logger_volt      lat     lon
time                                            
2017-01-01 00:01:20     12.0112  37.1509 -98.362
2017-01-01 00:01:40     12.0113     None -98.362
2017-01-01 00:02:00     12.0057     None -98.362
2017-01-01 00:02:20     12.0113  37.1509 -98.362
2017-01-01 00:02:40     12.0058  37.1509    None
2017-01-01 00:03:00     12.0113  37.1509    None

相关问题 更多 >

    热门问题