![](/img/trans.png)
[英]How to slice a Pandas Time Series using a logical expression involving dates
[英]How do I slice a pandas time series on dates not in the index?
我有一個由 datetime.date 索引的時間序列。 這是該系列的第一個結:
1999-12-31 0
2000-06-30 170382.118454
2000-12-29 -319260.443362
我想從系列的開頭切到 2000 年 12 月 28 日,但這不起作用,因為該日期不在索引中(當我嘗試original_series[:datetime.date(2000,12,28)]
時出現 KeyError original_series[:datetime.date(2000,12,28)]
. 我也嘗試將索引轉換為時間戳,但這會產生非常虛假的結果(它會制造假結,見下文),所以我想知道是否有解決這個問題的好方法。
test = pd.Series(original_series.values, map(pd.Timestamp, original_series.index))
乍一看,這看起來不錯:
1999-12-31 0.000000
2000-06-30 170382.118454
2000-12-29 -319260.443362
但是后來我嘗試進行切片(2000 年 1 月的那些額外的日子是從哪里來的?):
In [84]: test[:'2000-12-28']
Out[84]:
1999-12-31 0.000000
2000-06-30 170382.118454
2000-01-03 -71073.979016
2000-01-04 100498.744748
2000-01-05 91104.743684
2000-01-06 82290.255459
你可以簡單地做,如果ts
是你的time.serie
:
In [77]: ts = pd.Series([99,65],index=pd.to_datetime(['2000-12-24','2000-12-30']))
In [78]: ts
Out[78]:
2000-12-24 99
2000-12-30 65
dtype: int64
In [79]: ts[ts.index<=pd.to_datetime('2000-12-28')]
Out[79]:
2000-12-24 99
dtype: int64
如果您將index
作為string
,請繼續:
ts[ts.index.map(pd.to_datetime)<=pd.to_datetime('2000-12-28')]
有一種簡單的方法可以做到這一點,而無需將其轉換為時間序列對象。
當您的索引不是日期時的場景:
你的df:
索引日期數據
0 2000-01-01 10
1 2000-01-02 20
2 2000-01-03 12
首先,將您的日期轉換為日期時間格式:
df["date"] = pd.to_datetime(df["date"])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.