Pandas DatetimeIndex 截断错误

5 投票
2 回答
5237 浏览
提问于 2025-04-17 14:19

我有一个叫做 df 的 pandas 数据框:

Out[16]:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 269850 entries, 2012-12-19 16:15:36 to 2012-12-20 14:36:55
Data columns:
X1    269850  non-null values
X2      269848  non-null values
X3      269848  non-null values
dtypes: float64(2), object(1)

我想从 2012-12-20 05:00:002012-12-20 09:00:00 这段时间内,提取出四个小时的数据。

当我尝试这样做时:

Slicedf = df.truncate(before='12/20/2012 05:00:00',after='12/20/2012 09:00:00')

出现了以下错误:

KeyError: datetime.datetime(2012, 12, 20, 5, 0)

我还尝试过(参考了这个链接:Pandas 数据框按天/小时/分钟切片):

from datetime import datetime
x=datetime(2012,12,20,5,0,0)
y=datetime(2012,12,20,9,0,0)
Slicedf = df.ix[x:y]

但是结果还是出现了完全相同的错误。

2 个回答

5

你可能需要把代码改成:

df = df.sort_values() 或者 df = df.sort_index(),这样才能在后面的Pandas版本中修复错误。

所以你的代码应该像这样:df = df.sort_index().truncate(before='12/20/2012 05:00:00', after='12/20/2012 09:00:00')

以前的sort方法在处理数据表时已经不推荐使用了,现在需要用sort_values或者sort_index。你可以在文档中找到更多关于这两个方法的详细信息,分别在这里这里

4

这个df是通过把多个数据表拼接在一起,用了一个叫concat的函数。

在截断之前,先用df = df.sort()来排序,这样就解决了错误。

撰写回答