gpt4 book ai didi

python - 将 DateTimeindex 转换为仅包含年、小时和日而不包含时间信息

转载 作者:行者123 更新时间:2023-11-28 21:03:57 24 4
gpt4 key购买 nike

我有一个带有索引的数据框,该索引还包含 Hour:second:... 但我只想将日期包含为年、月、日。

索引是否可能仍然是 DateTimeIndex 但仅包含年、月、日?

当前索引看起来像:

my_index = DatetimeIndex(['2017-08-25', '2017-08-24', '2017-08-23', '2017-08-22',
'2017-08-21', '2017-08-20', '2017-08-19', '2017-08-18',
'2017-08-17', '2017-08-16',
...
'2015-07-19', '2015-07-18', '2015-07-17', '2015-07-16',
'2015-07-15', '2015-07-14', '2015-07-13', '2015-07-12',
'2015-07-11', '2015-07-10'],
dtype='datetime64[ns]', length=778, freq=None)

我能做到:

only_date_index = [el.date() for el in my_index]

但是如果我想在 pandas 中使用 resample 函数,我会收到错误消息:TypeError:仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但得到了“Index”的实例。

最佳答案

你需要DatetimeIndex.floor :

myIndex = df.index.floor('D')

示例:

rng = pd.date_range('2017-04-03 15:00:45', periods=10, freq='24T')
df = pd.DataFrame({'a': range(10)}, index=rng)
print (df)
a
2017-04-03 15:00:45 0
2017-04-03 15:24:45 1
2017-04-03 15:48:45 2
2017-04-03 16:12:45 3
2017-04-03 16:36:45 4
2017-04-03 17:00:45 5
2017-04-03 17:24:45 6
2017-04-03 17:48:45 7
2017-04-03 18:12:45 8
2017-04-03 18:36:45 9

myIndex = df.index.floor('D')
print (myIndex)
DatetimeIndex(['2017-04-03', '2017-04-03', '2017-04-03', '2017-04-03',
'2017-04-03', '2017-04-03', '2017-04-03', '2017-04-03',
'2017-04-03', '2017-04-03'],
dtype='datetime64[ns]', freq=None)

感谢另一个解决方案 Deckerz - 使用 DatetimeIndex.normalize :

myIndex = df.index.normalize()
print (myIndex)
DatetimeIndex(['2017-04-03', '2017-04-03', '2017-04-03', '2017-04-03',
'2017-04-03', '2017-04-03', '2017-04-03', '2017-04-03',
'2017-04-03', '2017-04-03'],
dtype='datetime64[ns]', freq=None)

时间:

ix = pd.date_range('1970-01-01', '2200-01-15', freq='1H')

print (len(ix))
2016481

In [68]: %timeit (ix.normalize())
10 loops, best of 3: 178 ms per loop

In [69]: %timeit (ix.floor('d'))
10 loops, best of 3: 38.4 ms per loop

#solution from Dror (https://stackoverflow.com/questions/45954497/in-pandas-group-by-date-from-datetimeindex)
In [70]: %timeit pd.to_datetime(ix.date)
1 loop, best of 3: 5.09 s per loop

关于python - 将 DateTimeindex 转换为仅包含年、小时和日而不包含时间信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45943321/

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