当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。