簡體   English   中英

如何在索引中沒有的日期對 pandas 時間序列進行切片?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM