无法在熊猫数据框中按时间戳索引

Posted

技术标签:

【中文标题】无法在熊猫数据框中按时间戳索引【英文标题】:Can't index by timestamp in pandas dataframe 【发布时间】:2015-04-15 15:17:02 【问题描述】:

我拿了一张包含日期和一些值的 excel 表,想将它们转换为 pandas 数据框,并只选择特定日期之间的行。

由于某种原因,我无法按日期索引选择一行

Excel 文件中的原始数据

MCU                         
Timestamp   50D 10P1    10P2    10P3    10P6    10P9    10P12
12-Feb-15   25.17   5.88    5.92    5.98    6.18    6.23    6.33
11-Feb-15   25.9    6.05    6.09    6.15    6.28    6.31    6.39
10-Feb-15   26.38   5.94    6.05    6.15    6.33    6.39    6.46

代码

xls = pd.ExcelFile('e:/Data.xlsx')
vols = xls.parse(asset.upper()+'VOL',header=1)
vols.set_index('Timestamp',inplace=True)

set_index 之前的数据

      Timestamp    50D  10P1  10P2  10P3  10P6  10P9  10P12  25P1  25P2  \
0    2015-02-12  25.17  5.88  5.92  5.98  6.18  6.23   6.33  2.98  3.08   
1    2015-02-11  25.90  6.05  6.09  6.15  6.28  6.31   6.39  3.12  3.17   
2    2015-02-10  26.38  5.94  6.05  6.15  6.33  6.39   6.46  3.01  3.16  

set_index 之后的数据

              50D  10P1  10P2  10P3  10P6  10P9  10P12  25P1  25P2  25P3  \
Timestamp                                                                  
2015-02-12  25.17  5.88  5.92  5.98  6.18  6.23   6.33  2.98  3.08  3.21   
2015-02-11  25.90  6.05  6.09  6.15  6.28  6.31   6.39  3.12  3.17  3.32   
2015-02-10  26.38  5.94  6.05  6.15  6.33  6.39   6.46  3.01  3.16  3.31  

输出

>>> vols.index
<class 'pandas.tseries.index.DatetimeIndex'>
[2015-02-12, ..., NaT]
Length: 1478, Freq: None, Timezone: None

>>> vols[date(2015,2,12)]
*** KeyError: datetime.date(2015, 2, 12)

我希望这不会失败,而且我应该能够选择一个日期范围。尝试了很多组合,但没有得到它。

【问题讨论】:

【参考方案1】:

使用datetime.date 实例尝试检索索引是行不通的,您只需要日期的字符串表示,例如'2015-02-12''2015/02/14'

其次,vols[date(2015,2,12)] 实际上是在查看 DataFrame 的列标题,而不是索引。您可以改用loc 来获取行索引标签。例如你可以写vols.loc['2015-02-12']

【讨论】:

以上是关于无法在熊猫数据框中按时间戳索引的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫数据框中使用应用时创建列时间戳?

如何从熊猫数据框中的时间戳列中删除时区

将ARMA模型拟合到python中按时间索引的时间序列

无法使用时间戳索引散景折线图的 x 轴

将熊猫系列时间戳转换为唯一日期列表

熊猫:计算时间戳和当前时间之间经过的时间,但只有营业时间和时区