如何填补pandas数据框架中缺失的小时值[英] How to fill the missing hour Values in a pandas DataFrame

本文是小编为大家收集整理的关于如何填补pandas数据框架中缺失的小时值的处理方法,想解了如何填补pandas数据框架中缺失的小时值的问题怎么解决?如何填补pandas数据框架中缺失的小时值问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个 pandas 数据框,它是一个返回每小时值的 sql 查询的输出如果值不符合特定阈值.

 date_date  | hour24 | column
------------------------------------
 2017-10-29 | 00:00  | 5.8055152395
 2017-10-29 | 01:00  | 1.2578616352
 2017-10-29 | 02:00  | -1.5197568389
 2017-10-29 | 03:00  | -12.5560538117
 2017-10-29 | 04:00  | -15.6862745098
 2017-10-29 | 05:00  | -18.487394958
 2017-10-29 | 06:00  | -13.2911392405
 2017-10-29 | 07:00  | -9.3385214008
 2017-10-29 | 08:00  | -15.3846153846
 2017-10-28 | 00:00  | 6.9666182874
 2017-10-28 | 01:00  | 8.3857442348
 2017-10-28 | 02:00  | 8.8145896657
 2017-10-28 | 03:00  | 4.0358744395
 2017-10-28 | 04:00  | 13.0718954248
 2017-10-28 | 05:00  | 0
 2017-10-28 | 06:00  | 13.9240506329
 2017-10-28 | 07:00  | 24.513618677

我使用此输出来创建报告.因此,对于每个小时,如果查询返回一个值,我希望它被标记为失败,但我也希望小时数值未超过阈值以标记为通过.例如

 date_date  | hour24 | Result
------------------------------
 2017-10-29 | 00:00  | Failed
 2017-10-29 | 01:00  | Failed
 2017-10-29 | 02:00  | Failed
 2017-10-29 | 03:00  | Failed
 2017-10-29 | 04:00  | Failed
 2017-10-29 | 05:00  | Failed
 2017-10-29 | 06:00  | Failed
 2017-10-29 | 07:00  | Failed
 2017-10-29 | 08:00  | Failed
 2017-10-29 | 09:00  | Passed
 2017-10-29 | 10:00  | Passed
 2017-10-29 | 11:00  | Passed
 2017-10-29 | 12:00  | Passed
 2017-10-29 | 13:00  | Passed
 2017-10-29 | 14:00  | Passed
 2017-10-29 | 15:00  | Passed
 2017-10-29 | 16:00  | Passed
 2017-10-29 | 17:00  | Passed
 2017-10-29 | 18:00  | Passed
 2017-10-29 | 19:00  | Passed
 2017-10-29 | 20:00  | Passed
 2017-10-29 | 21:00  | Passed
 2017-10-29 | 22:00  | Passed
 2017-10-29 | 23:00  | Passed
 2017-10-28 | 00:00  | Failed
 2017-10-28 | 01:00  | Failed
.
.
.

推荐答案

您可以创建一个示例数据框,其中包含报告所需的列,例如

In [1]: reporting_df.columns
Out[1]: Index(['date_date', 'Hour'], dtype='object')`

并将reporting_df 与data_date 列上SQL 查询输出中的数据框合并

In [2]: out_df = pd.merge(left=reporting_df, right=query_df, on='date_date', how='inner')
Out[2]: out_df.head(3)
date_date hour24 column
2017-10-29 00:00 5.8055152395
2017-10-29 01:00 1.2578616352
2017-10-29 02:00 -1.5197568389
2017-10-29 03:00 -12.5560538117
2017-10-29 04:00 NaN

并使用 np.where 获取状态

In [3]: out_df['Status'] = np.where(pd.isnull(out_df['column']), 'Success', 'Fail')

并删除不需要的列

In [4]: out_df.drop('column', axis=1, inplace=True)
In [5]: out_df.head(3)
Out[5]: 
date_date hour24 status
2017-10-29 00:00 Fail
2017-10-29 01:00 Fail
2017-10-29 02:00 Fail
2017-10-29 03:00 Fail
2017-10-29 04:00 Pass

本文地址:https://www.itbaoku.cn/post/1727811.html