无法在熊猫数据框中按时间戳索引
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']
【讨论】:
以上是关于无法在熊猫数据框中按时间戳索引的主要内容,如果未能解决你的问题,请参考以下文章