检查索引中是否有任何缺失的日期

新手上路,请多包涵

有没有办法直接检查数据框中缺少的日期。我想检查 2013-01-192018-01-29 之间是否缺少日期

            GWA_BTC      GWA_ETH    GWA_LTC  GWA_XLM  GWA_XRP
   Date
2013-01-19  11,826.36   1,068.45    195.00    0.51    1.82
2013-01-20  13,062.68   1,158.71    207.58    0.52    1.75
   ...
2018-01-28  12,326.23   1,108.90    197.36    0.48    1.55
2018-01-29  11,397.52   1,038.21    184.92    0.47    1.43

我试图手动检查它,但花了很多时间。

原文由 user_6396 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 598
2 个回答

您可以使用 DatetimeIndex.difference(other)

 pd.date_range(start = '2013-01-19', end = '2018-01-29' ).difference(df.index)

它返回另一个中不存在的元素

原文由 Vaishali 发布,翻译遵循 CC BY-SA 4.0 许可协议

例子:

作为一个最小的例子,拿这个:

 >>> df
              GWA_BTC   GWA_ETH  GWA_LTC  GWA_XLM  GWA_XRP
Date
2013-01-19  11,826.36  1,068.45   195.00     0.51     1.82
2013-01-20  13,062.68  1,158.71   207.58     0.52     1.75
2013-01-28  12,326.23  1,108.90   197.36     0.48     1.55
2013-01-29  11,397.52  1,038.21   184.92     0.47     1.43

我们可以找到 2013-01-192013-01-29 之间缺失的日期

方法一:

参见@Vaishali 的回答

使用 .difference 找出日期时间索引与范围内所有日期集之间的差异:

 pd.date_range('2013-01-19', '2013-01-29').difference(df.index)

哪个返回:

 DatetimeIndex(['2013-01-21', '2013-01-22', '2013-01-23', '2013-01-24',
               '2013-01-25', '2013-01-26', '2013-01-27'],
              dtype='datetime64[ns]', freq=None)

方法二:

您可以使用所需日期范围内的所有日期重新索引数据框,并找到 reindex 已插入 NaN 的位置。

并查找 2013-01-192013-01-29 之间缺失的日期:

 >>> df.reindex(pd.date_range('2013-01-19', '2013-01-29')).isnull().all(1)

2013-01-19    False
2013-01-20    False
2013-01-21     True
2013-01-22     True
2013-01-23     True
2013-01-24     True
2013-01-25     True
2013-01-26     True
2013-01-27     True
2013-01-28    False
2013-01-29    False
Freq: D, dtype: bool

那些带有 True 的值是原始数据框中缺少的日期

原文由 sacuL 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题