當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Pandas DatetimeIndex構造函數用法及代碼示例


Pandas DatetimeIndex 構造函數創建一個新的 DatetimeIndex 對象,該對象最常用作 DataFrame 的索引。

警告

選擇使用 pd.date_range(~) 方法來初始化DatetimeIndex,而不是直接使用此構造函數。 date_range(~) 提供了更大的靈活性,並且在官方文檔中使用更廣泛。

參數

1.data | 1D array-like | optional

用於構造 DatetimeIndex 的類似數組。

2. freq | string | optional

DatetimeIndex 的頻率。默認情況下,freq=None

3. tz | pytz.timezonedateutil.tz.tzfiledatetime.tzinfostring | optional

DatetimeIndex 的時區。默認情況下,生成的 DatetimeIndex 很幼稚,因為它沒有時區的概念。

4. normalize | boolean | optional

是否將日期的時間單位設置為午夜。默認情況下,normalize=False

警告

設置這個參數好像沒有什麽效果。如果您遇到同樣的問題,請改用 date_range(~) normalize

5. closed | Nonestring | optional

是否使邊界包含/排除:

說明

"left"

  • 左端點變得包含在內。

  • 右端點變得獨占。

"right"

  • 左端點變為獨占端點。

  • 右端點變得具有包容性。

None

兩個界限都變得具有包容性。

默認情況下,closed=None

6. ambiguous | stringarray<boolean> | optional

僅當您指定時區 (tz) 時,此參數才相關。由於夏令時 (DST) 引起的時間調整,時間可能會出現歧義。例如,考慮以下情況:

Local time:
01:59:58
01:59:59   
01:00:00   # DST ends and so we set the wall clock back 1 hour
01:00:01
...
01:59:58   # This local time occured for the second time
...

如果您嘗試本地化發生兩次的時間(例如 01:59:58 ),那麽 Pandas 會很困惑您指的是哪個時間 - 第一次(DST)還是第二次(非 DST)?

Pandas 可以通過以下方式之一處理這種歧義:

說明

"infer"

根據提供的時間順序推斷 DST 轉換。

arrayboolean

布爾數組(例如列表、Numpy 數組),其中:

  • True表示夏令時

  • False表示非夏令時

"NaT"

不明確的時間將轉換為NaT (not-a-time)。

"raise"

模棱兩可的時候會引發錯誤。

默認情況下,ambiguous="raise"

7. dayfirst | boolean | optional

如果 True ,則將第一個數字視為一天。例如, "10/12/2020" 將被解析為 2020 年 12 月 10 日。默認情況下, dayfirst=False

8. yearfirst | boolean | optional

如果 True ,則將第一個數字視為年份。例如, "20/12/10" 將被解析為 2020 年 12 月 10 日。默認情況下, yearfirst=False

9. dtype | stringnumpy.dtypeDatetimeTZDtype | optional

允許的 dtype'datetime64[ns]' 。您可以使用 dtype 嵌入時區,而不是指定 tz ,如下所示:

dtype="datetime64[ns, Europe/Paris]"

10.copy | boolean | optional

  • 如果 True ,則將返回 data 的新副本 - 修改此複製的數據不會影響原始數據,反之亦然。

  • 如果是 False ,則將返回對 data 的引用 - 修改返回值將改變原始數據,反之亦然。

默認情況下,copy=False

11.name | string | optional

分配給生成的 DatetimeIndex 的名稱。默認情況下,name=None

返回值

DatetimeIndex 對象。

例子

基本用法

要使用日期字符串列表創建DatetimeIndex

idx = pd.DatetimeIndex(["2020-12-25","2020-12-26"])
idx



DatetimeIndex(['2020-12-25', '2020-12-26'], dtype='datetime64[ns]', freq=None)

我們可以用它來初始化 DataFrame 和 DatetimeIndex

df = pd.DataFrame({"A":["a","b"]}, index=idx)
df



            A
2020-12-25  a
2020-12-26  b

指定時區

要指定時區,請設置tz,如下所示:

pd.DatetimeIndex(["2020-12-25","2020-12-26"], tz="Asia/Tokyo")



DatetimeIndex(['2020-12-25 00:00:00+09:00', '2020-12-26 00:00:00+09:00'], dtype='datetime64[ns, Asia/Tokyo]', freq=None)

這裏,附加的+09:00表示東京的標準時間比UTC早9個小時。

處理曖昧時期

2019-10-27 3AM(中歐時間),DST 結束,這意味著掛鍾向後撥回一小時。因此,我們這裏有一個不明確的情況,其中像 2019-10-27 02:30:00 這樣的本地時間出現了兩次。

增加

默認情況下, ambiguous="raise" ,這意味著如果日期不明確,則會引發錯誤:

pd.DatetimeIndex(['2019-10-27 02:30:00',
 '2019-10-27 02:00:00',
 '2019-10-27 02:30:00',
 '2019-10-27 03:00:00',
 '2019-10-27 03:30:00'], tz="CET")



AmbiguousTimeError: Cannot infer dst time from 2019-10-27 02:30:00, try using the 'ambiguous' argument
推斷

設置 ambiguous="infer" 告訴 Pandas 嘗試解決提供的日期序列中的歧義:

pd.DatetimeIndex(['2019-10-27 02:30:00',
 '2019-10-27 02:00:00',
 '2019-10-27 02:30:00',
 '2019-10-27 03:00:00',
 '2019-10-27 03:30:00'], tz="CET", ambiguous="infer")



DatetimeIndex(['2019-10-27 02:30:00+02:00', '2019-10-27 02:00:00+01:00',
               '2019-10-27 02:30:00+01:00', '2019-10-27 03:00:00+01:00',
               '2019-10-27 03:30:00+01:00'],
              dtype='datetime64[ns, CET]', freq=None)

在這裏,請注意 Pandas 如何推斷第一個 02:30:00 處於夏令時,而第二個 02:30:30 處於非夏令時。

布爾數組

要明確告訴 Pandas 日期是否應該解析為 DST 還是非 DST,請傳遞一個布爾數組,其中 True 表示 DST:

pd.DatetimeIndex(['2019-10-27 02:30:00',
 '2019-10-27 02:50:00'], tz="CET", ambiguous=[True, False])



DatetimeIndex(['2019-10-27 02:30:00+02:00', '2019-10-27 02:50:00+01:00'], dtype='datetime64[ns, CET]', freq=None)
NaT

要將不明確的日期設置為NaT (not-a-time):

pd.DatetimeIndex(['2019-10-27 02:30:00',
 '2019-10-27 02:00:00',
 '2019-10-27 02:30:00',
 '2019-10-27 03:00:00',
 '2019-10-27 03:30:00'], tz="CET", ambiguous="NaT")



DatetimeIndex(['NaT', 'NaT', 'NaT', '2019-10-27 03:00:00+01:00',
               '2019-10-27 03:30:00+01:00'],
              dtype='datetime64[ns, CET]', freq=None)

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas | DatetimeIndex constructor。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。