gpt4 book ai didi

python - Pandas 日期时间索引的算术运算

转载 作者:太空狗 更新时间:2023-10-30 01:01:26 26 4
gpt4 key购买 nike

在 pandas 中,您可以通过基于经典整数位置/行的索引或基于日期时间的索引来访问时间序列的特定位置。基于整数的索引可以使用基本的算术运算来操作,例如如果我有一个频率为 12 小时的时间序列的 integer_index,并且我想恰好在此之前一天访问该条目,我可以简单地执行 integer_index - 2。然而,现实世界的数据并不总是完美的,有时会丢失行。在这种情况下,此方法失败,并且能够使用基于日期时间的索引并从该索引中减去例如 one day 会很有帮助。我该怎么做?

示例脚本:

# generate a sample time series
import pandas as pd
s = pd.Series(["A", "B", "C", "D", "E"], index=pd.date_range("2000-01-01", periods=5, freq="12h"))
print s

2000-01-01 00:00:00 A
2000-01-01 12:00:00 B
2000-01-02 00:00:00 C
2000-01-02 12:00:00 D
2000-01-03 00:00:00 E
Freq: 12H, dtype: object

# these to indices should access the same value ("C")
integer_index = 2
date_index = "2000-01-02 00:00"

print s[integer_index] # prints "C"
print s[date_index] # prints "C"

# I can access the value one day earlier by subtracting 2 from the integer index
print s[integer_index - 2] # prints A

# how can I subtract one day from the date index?
print s[date_index - 1] # raises an error

这个问题的背景可以在我之前提交的文章中找到:

Fill data gaps with average of data from adjacent days

用户 JohnE 找到了解决我的问题的方法,该方法使用基于整数位置的索引。他通过对时间序列重新采样来确保我拥有等间距的数据。

最佳答案

您的日期时间索引不是基于字符串,而是一个 DatetimeIndex这意味着您可以使用 datetime适当索引的对象,而不是看起来像日期的字符串。

下面的代码将 date_index 转换为 datetime 对象,然后使用 timedelta(days=1)从中减去“一天”。

# generate a sample time series
import pandas as pd
from datetime import datetime, timedelta

s = pd.Series(["A", "B", "C", "D", "E"], index=pd.date_range("2000-01-01", periods=5, freq="12h"))
print(s)

# these two indices should access the same value ("C")
integer_index = 2
# Converts the string into a datetime object
date_index = datetime.strptime("2000-01-02 00:00", "%Y-%m-%d %H:%M")
print(date_index) # 2000-01-02 00:00:00

print(s[integer_index]) # prints "C"
print(s[date_index]) # prints "C"


print(s[integer_index - 2]) # prints "A"

one_day = timedelta(days=1)
print(s[date_index - one_day]) # prints "A"
print(date_index - one_day) # 2000-01-01 00:00:00

关于python - Pandas 日期时间索引的算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25929818/

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