python - 检查我的时间序列索引数据是否有工作日的任何缺失值
问题描述
我有从“2015 年 1 月 5 日”到“2018 年 12 月 28 日”的时间序列数据。我观察到了一些工作日的日期,它们的值丢失了。如何检查我的时间范围内缺少多少个工作日?这些日期是什么,以便我可以推断这些日期的值。
例子:
Date Price Volume
2018-12-28 172.0 800
2018-12-27 173.6 400
2018-12-26 170.4 500
2018-12-25 171.0 2200
2018-12-21 172.8 800
在观察日历上,2018 年 12 月 21 日是星期五。然后不包括周六和周日,数据集应该在列表中有“2018 年 12 月 24 日”,但它缺失了。我需要从范围中识别出这些缺失的日期。
到目前为止我的方法:我尝试使用
pd.date_range('2015-01-05','2018-12-28',freq='W')
确定周数并计算周数。手动从他们那里获得工作日的数量,以识别缺失日期的数量。但它解决了目的,因为我需要从范围内识别缺失的日期。
解决方案
假设这是您的完整数据集:
Date Price Volume
2018-12-28 172.0 800
2018-12-27 173.6 400
2018-12-26 170.4 500
2018-12-25 171.0 2200
2018-12-21 172.8 800
并且dates
是:
dates = pd.date_range('2018-12-15', '2018-12-31')
首先,确保 Date 列实际上是一个日期类型:
df['Date'] = pd.to_datetime(df['Date'])
然后将 Date 设置为索引:
df = df.set_index('Date')
df = df.reindex(dates, fill_value=0.0)
然后重置索引以使其更易于使用:
df = df.reset_index()
现在看起来像这样:
index Price Volume
0 2018-12-15 0.0 0.0
1 2018-12-16 0.0 0.0
2 2018-12-17 0.0 0.0
3 2018-12-18 0.0 0.0
4 2018-12-19 0.0 0.0
5 2018-12-20 0.0 0.0
6 2018-12-21 172.8 800.0
7 2018-12-22 0.0 0.0
8 2018-12-23 0.0 0.0
9 2018-12-24 0.0 0.0
10 2018-12-25 171.0 2200.0
11 2018-12-26 170.4 500.0
12 2018-12-27 173.6 400.0
13 2018-12-28 172.0 800.0
14 2018-12-29 0.0 0.0
15 2018-12-30 0.0 0.0
16 2018-12-31 0.0 0.0
做:
df['weekday'] = df['index'].dt.dayofweek
最后,您的时间范围内缺少多少个工作日:
missing_weekdays = df[(~df['weekday'].isin([5,6])) & (df['Volume'] == 0.0)]
结果:
>>> missing_weekdays
index Price Volume weekday
2 2018-12-17 0.0 0.0 0
3 2018-12-18 0.0 0.0 1
4 2018-12-19 0.0 0.0 2
5 2018-12-20 0.0 0.0 3
9 2018-12-24 0.0 0.0 0
16 2018-12-31 0.0 0.0 0
推荐阅读
- c# - Passing Null Date Parameter from C# to SQL returns data with Zero in Count Column
- java - How to download a file from azure adls gen 1 to my local using java sdk?
- android - Toolbar moves up when keyboard appears in fragment android
- webrtc - How does audio and video in a webrtc peerconnection stay in sync?
- r - How to crosstab 4 variables using tabyl in R
- javascript - The step by step actions which occur as a result of the return operator, inside a function
- android - My camera package depends on quiver 3.0, whereas contacts package depends on quiver 2.0 in flutter
- macos - How to deal with code signed 3rd party libraries for distribution?
- oracle - Clear Oracle queue after propagation
- python - MSEdgeDriver - session not created: No matching capabilities found error on Selenium with Python