按天/小时/分钟切片的Pandas DataFrame

6
我有一个带有日期时间索引的pandas数据帧,格式为“YYYY-MM-DD HH:MM:SS”。
Index               Parameter
2007-05-02 14:14:08     134.8
2007-05-02 14:14:32     134.8 
2007-05-02 14:14:41     134.8 
2007-05-02 14:14:53     134.8 
2007-05-02 14:15:01     134.8 
2007-05-02 14:15:09     134.8 
......
2007-05-30 23:08:02     105.9 
2007-05-30 23:18:02     105.9 
2007-05-30 23:28:02     105.9 
2007-05-30 23:38:03     105.8 

可以通过年份切割DataFrame,例如df['2007']或者通过月份切割df['2007-05']。但是,当我尝试按天切片DataFrame,例如df['2007-05-02']时,我遇到了错误:
KeyError: < Timestamp: 2007-02-05 00:00:00. 

我使用的是pandas 8.0.1版本。是否可以按日或小时切片DataFrame,而不是年或月?


1
有趣的是,按年或年月索引与按年月日索引具有不同的行为。对于年月日,只考虑时间戳为H:M:S=0:0:0的情况。顺便说一句,我想你正在处理一个Series而不是DataFrame。 - Wouter Overmeire
1个回答

12

使用df.ix[x:y],其中xy是日期时间对象。

示例:

In [117]: frame.index.summary()
Out[117]: 'DatetimeIndex: 6312960 entries, 2000-04-05 00:01:00 to 2012-04-06 00:00:00\nFreq: T'


In [118]: x=datetime(2001, 4, 5, 0, 1)

In [119]: y=datetime(2001, 4, 5, 0, 5)

In [120]: print frame.ix[x:y]
                     radiation      tamb
2001-04-05 00:01:00  67.958873  8.077386
2001-04-05 00:02:00  50.801294  0.731453
2001-04-05 00:03:00  16.042035  6.944998
2001-04-05 00:04:00   5.678343  9.728967
2001-04-05 00:05:00  72.551601  7.652942

你也可以这样做:
In [121]: print frame.ix[x]
radiation    67.958873
tamb          8.077386
Name: 2001-04-05 00:01:00

2
可以在没有“命中”精确索引点的情况下完成吗?例如,如果系列从2007-05-02 14:14:08开始,使用x = pd.Timestamp('2007-05-02 14:00:00')进行索引仍会引发“KeyError”。 - metakermit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接