有什么方法可以直接检查数据框中是否缺少日期。
我想检查一下2013-01-19
至2018-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
我尝试手动检查它,但是花了很多时间。
答案 0 :(得分:6)
您可以使用DatetimeIndex.difference(other)
<div>
<a>
<div>
<img src="https://cdn.pixabay.com/photo/2014/09/03/20/15/legs-434918_960_720.jpg" class="rounded float-right"/>
</div>
</a>
</div>
它返回另一个中不存在的元素
答案 1 :(得分:2)
作为一个最小的示例,请采取以下步骤:
>>> 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-19
和2013-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-19
和2013-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
的值是原始数据框中的缺失日期
答案 2 :(得分:0)
我无法发表评论,但是您可以遍历每个值并将24小时添加到前一个值以查看日期是否匹配?
import pandas as pd
a = [1,2,3,4,5]
b = [1,0.4,0.3,0.5,0.2]
df = pd.DataFrame({'a':a , 'b': b})
for i in range(len(df)):
prev = df.loc[i,'a']
if i is 0:
continue
else:
# Add 1 day to the current value and check with prev value
答案 3 :(得分:0)
假设数据是每日非营业日期:
df.index.to_series().diff().dt.days > 1