Python 在pandas数据框中插入缺少的工作日,并用NaN填充

Python 在pandas数据框中插入缺少的工作日,并用NaN填充,python,python-2.7,pandas,datetimeindex,Python,Python 2.7,Pandas,Datetimeindex,我正试图在一个时间序列数据框中插入缺少的工作日,例如 import pandas as pd from pandas.tseries.offsets import * df = pd.DataFrame([['2016-09-30', 10, 2020], ['2016-10-03', 20, 2424], ['2016-10-05', 5, 232]], columns=['date', 'price', 'vol']).set_index('date') df['date'] = pd.to

我正试图在一个时间序列数据框中插入缺少的工作日,例如

import pandas as pd
from pandas.tseries.offsets import *
df = pd.DataFrame([['2016-09-30', 10, 2020], ['2016-10-03', 20, 2424], ['2016-10-05', 5, 232]], columns=['date', 'price', 'vol']).set_index('date')
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')
数据如下所示:

Out[300]: 
            price   vol
date                   
2016-09-30     10  2020
2016-10-03     20  2424
2016-10-05      5   232
我可以使用pd.date\u范围轻松创建一系列工作日

基于该DateTimeIndex,我想在我的DF中添加缺失的日期,并用NaN填充列值,因此我得到:

Out[300]: 
            price   vol
date                   
2016-09-30     10  2020
2016-10-03     20  2424
2016-10-04     NaN  NaN
2016-10-05      5   232
有没有一个简单的方法可以做到这一点?谢谢

您可以使用reindex:

df.index = pd.to_datetime(df.index)

df.reindex(pd.date_range('2016-09-30', '2016-10-05', freq=BDay()))
Out: 
            price     vol
2016-09-30   10.0  2020.0
2016-10-03   20.0  2424.0
2016-10-04    NaN     NaN
2016-10-05    5.0   232.0

或者,您可以使用,为工作日指定“B”,而无需指定开始或结束日期序列,因为数据帧维护日期时间索引

df = df.resample('B').sum()

#             price     vol
# date                     
# 2016-09-30   10.0  2020.0
# 2016-10-03   20.0  2424.0
# 2016-10-04    NaN     NaN
# 2016-10-05    5.0   232.0
df = df.resample('B').sum()

#             price     vol
# date                     
# 2016-09-30   10.0  2020.0
# 2016-10-03   20.0  2424.0
# 2016-10-04    NaN     NaN
# 2016-10-05    5.0   232.0