一种可能的解决方案是删除转换为日期时间并按字符串重新索引(由DatetimeIndex.strftime 创建):
df = pd.read_fwf("data", widths=widths)
df = (df.set_index('date_time')
.reindex(pd.date_range("20080322 0000", "20080322 0010", freq='1min')
.strftime('%Y%m%d %H%M')))
print (df)
var1 var2 var3 var4 var6
20080322 0000 0.0 0.0 0.0 0.0 -11.0
20080322 0001 0.0 5.0 0.0 0.0 9.0
20080322 0002 NaN NaN NaN NaN NaN
20080322 0003 5.0 0.0 0.0 0.0 0.0
20080322 0004 0.0 0.0 11.0 0.0 -9.0
20080322 0005 0.0 12.0 0.0 0.0 1.0
20080322 0006 NaN NaN NaN NaN NaN
20080322 0007 NaN NaN NaN NaN NaN
20080322 0008 NaN NaN NaN NaN NaN
20080322 0009 7.0 0.0 0.0 4.0 5.0
20080322 0010 0.0 0.0 0.0 0.0 27.0
另一个解决方案是删除 strftime 以将日期时间转换为字符串,以便按日期时间重新索引:
df = pd.read_fwf("data", widths=widths)
df['date_time'] = pd.to_datetime(df['date_time'] , format='%Y%m%d %H%M')
df = (df.set_index('date_time')
.reindex(pd.date_range("20080322 0000", "20080322 0010", freq='1min')))
或者使用DataFrame.asfreq - 使用DatetimeIndex:
df = pd.read_fwf("data", widths=widths)
df['date_time'] = pd.to_datetime(df['date_time'] , format='%Y%m%d %H%M')
df = df.set_index('date_time').asfreq('1 Min')
print (df)
var1 var2 var3 var4 var6
2008-03-22 00:00:00 0.0 0.0 0.0 0.0 -11.0
2008-03-22 00:01:00 0.0 5.0 0.0 0.0 9.0
2008-03-22 00:02:00 NaN NaN NaN NaN NaN
2008-03-22 00:03:00 5.0 0.0 0.0 0.0 0.0
2008-03-22 00:04:00 0.0 0.0 11.0 0.0 -9.0
2008-03-22 00:05:00 0.0 12.0 0.0 0.0 1.0
2008-03-22 00:06:00 NaN NaN NaN NaN NaN
2008-03-22 00:07:00 NaN NaN NaN NaN NaN
2008-03-22 00:08:00 NaN NaN NaN NaN NaN
2008-03-22 00:09:00 7.0 0.0 0.0 4.0 5.0
2008-03-22 00:10:00 0.0 0.0 0.0 0.0 27.0
如果需要,最后加上index的原始格式DatetimeIndex.strftime:
df.index = df.index.strftime('%Y%m%d %H%M')
print (df)
var1 var2 var3 var4 var6
20080322 0000 0.0 0.0 0.0 0.0 -11.0
20080322 0001 0.0 5.0 0.0 0.0 9.0
20080322 0002 NaN NaN NaN NaN NaN
20080322 0003 5.0 0.0 0.0 0.0 0.0
20080322 0004 0.0 0.0 11.0 0.0 -9.0
20080322 0005 0.0 12.0 0.0 0.0 1.0
20080322 0006 NaN NaN NaN NaN NaN
20080322 0007 NaN NaN NaN NaN NaN
20080322 0008 NaN NaN NaN NaN NaN
20080322 0009 7.0 0.0 0.0 4.0 5.0
20080322 0010 0.0 0.0 0.0 0.0 27.0