Fre*_*d S 5 python datetime pandas
在熊猫中,您可以通过基于经典整数位置/行的索引或基于日期时间的索引来访问时间序列的特定位置。可以使用基本的算术运算来操纵基于整数的索引,例如,如果我有一个integer_index频率为12小时的时间序列,而我想在此日期的前一天正好访问该条目,则可以这样做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
Run Code Online (Sandbox Code Playgroud)
这个问题的背景可以在我的早期论文中找到:
用户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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4911 次 |
| 最近记录: |