gpt4 book ai didi

python - 如何使用 datetime.date 对 Dataframe 中一天的行范围进行索引?

转载 作者:行者123 更新时间:2023-11-30 22:52:55 29 4
gpt4 key购买 nike

我的多索引数据框如下:

df.head()
Output
Unit Timestamp
1 2016-06-01 00:00:00 225894.9
2016-06-01 01:00:00 225895.9
2016-06-01 02:00:00 225896.9
2016-06-01 03:00:00 225897.9
2016-06-01 04:00:00 225898.9

df.tail()

Output
Unit Timestamp
16 2016-06-30 18:00:00 150543.1
2016-06-30 19:00:00 150544.1
2016-06-30 21:00:00 150546.1
2016-06-30 22:00:00 150547.1
2016-06-30 23:00:00 150548.1

即 16 个单位的一个月每小时数据。

我想挑选给定单位一天的数据。我有一个数据框中出现的日期数组,

days = array([datetime.date(2016, 6, 1), datetime.date(2016, 6, 2),
datetime.date(2016, 6, 3), datetime.date(2016, 6, 4),...
等等

如果我执行 df.ix[5,'2016-06-10'],我就会得到我想要的,即该日期的第 5 单元的日期

                       Output
Timestamp
2016-06-10 00:00:00 152364.6
2016-06-10 01:00:00 152365.7
2016-06-10 02:00:00 152366.6
...
2016-06-10 21:00:00 152386.6
2016-06-10 22:00:00 152386.6
2016-06-10 23:00:00 152387.6

但是当我有 datetime.date 对象而不是字符串时,相同的索引似乎不起作用。例如:

tenth = days[9] 计算为 datetime.date(2016, 6, 10),到目前为止一切顺利。

但是,当我执行 df.ix[5,tenth] 时,我得到“KeyError: u'no item named 2016-06-10'”

因此,'2016-06-10'“实现了我的意思”并返回当天的所有数据。如果使用 datetime.date 我该如何做同样的事情?

最佳答案

当您将看起来像日期时间的字符串传递给 pandas 选择器 ix 时,它会像条件一样使用它并返回所有满足的元素。在本例中,您使用的字符串的计算结果为一天。 Pandas 运行 ix 并返回当天的所有行。当您传递日期时间对象时,它会查找完全匹配。您没有一个,因为您的所有日期时间都是非零小时时间。

考虑:

s = pd.Series(range(5), pd.date_range('2016-03-31 01:00:00', periods=5, freq='H'))
s

2016-03-31 01:00:00 0
2016-03-31 02:00:00 1
2016-03-31 03:00:00 2
2016-03-31 04:00:00 3
2016-03-31 05:00:00 4
Freq: H, dtype: int64

获取'2016-03-31'上的所有元素

s.ix['2016-03-31']

2016-03-31 01:00:00 0
2016-03-31 02:00:00 1
2016-03-31 03:00:00 2
2016-03-31 04:00:00 3
2016-03-31 05:00:00 4
Freq: H, dtype: int64

现在分配一个日期时间

date = pd.to_datetime('2016-03-31')

s.ix[date]

还有...

KeyError: Timestamp('2016-03-31 00:00:00')

如果我们指定一个完全匹配的日期时间,我们应该会得到一个结果。

date2 = pd.to_datetime('2016-03-31 02:00:00')

然后

s.ix[date2]

返回:

1

成功了!

要使用日期时间并使其看起来更漂亮,请使用函数:

d2s = lambda d: d.strftime('%Y-%d-%m')

然后

s.ix[d2s(date)]

2016-03-31 01:00:00 0
2016-03-31 02:00:00 1
2016-03-31 03:00:00 2
2016-03-31 04:00:00 3
2016-03-31 05:00:00 4
Freq: H, dtype: int64

关于python - 如何使用 datetime.date 对 Dataframe 中一天的行范围进行索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38362699/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com