NumPy - 使用日期时间进行索引
在 NumPy 中使用日期时间进行索引
在 NumPy 中使用日期时间进行索引,可以轻松选择和操作基于特定时间的数据。这在处理时间序列数据(例如股票价格或温度读数)时非常有用。
使用 NumPy 中的 datetime64 类型,您可以像数组一样对数据进行切片、过滤和索引。这使您可以专注于特定的时间段,例如特定的日期或日期范围,并执行诸如比较或过滤日期以进行分析之类的操作。
使用日期时间数组进行基本索引
在 NumPy 中使用日期时间数组进行索引和切片,可以轻松访问特定的日期或日期范围。您可以通过指定日期时间数组中单个日期的位置来对其进行索引,就像常规数组一样。
对于切片,您可以通过提供开始和结束索引来选择连续的日期范围。此外,NumPy 支持布尔索引,允许您根据条件过滤日期(例如,选择特定日期之后的所有日期)。
示例
在以下示例中,我们将对 datetime64 数组进行切片,以选择特定范围的日期 -
import numpy as np # 定义一个 datetime 数组 dates = np.array(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05'], dtype='datetime64[D]') # 对 datetime 数组进行切片 selected_dates = dates[1:4] print(selected_dates)
这将产生以下输出 -
['2024-01-02' '2024-01-03' '2024-01-04']
使用布尔索引进行过滤
NumPy 中的布尔索引允许您根据条件过滤数组中的元素。使用日期时间数组时,此功能对于选择特定时间范围内的数据或满足某些基于时间的条件非常有用。
要执行布尔索引,您需要创建一个与原始日期时间数组结构匹配的条件(布尔数组)。该条件可以是任何比较日期(或其他数据)的逻辑表达式,它将返回一个包含 True 或 False 值的数组。然后使用这些 True 值从原始数组中过滤出相应的元素。
示例
在此示例中,我们使用布尔索引过滤日期时间数组,仅选择特定日期之后的日期 -
import numpy as np # 定义日期时间数组 dates = np.array(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05'], dtype='datetime64[D]') # 定义过滤条件 filtered_dates = dates[dates > np.datetime64('2024-01-02')] print(filtered_dates)
此操作的输出为 −
['2024-01-03' '2024-01-04' '2024-01-05']
使用日期范围进行索引
在 NumPy 中使用日期范围进行索引允许您选择和处理特定时间间隔内的日期时间数据子集。
要使用日期范围进行索引,您需要定义一个条件,指定您感兴趣的范围的起始和终止日期。这可以使用比较运算符来过滤所需范围内的日期。您可以使用逻辑运算符组合条件,从而更精确地过滤数据。
示例
在此示例中,我们选择特定日期范围内的数据 -
import numpy as np # 定义一个日期时间数组 dates = np.array(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05'], dtype='datetime64[D]') # 定义开始和结束日期 start_date = np.datetime64('2024-01-02') end_date = np.datetime64('2024-01-04') # 选择范围内的日期 range_dates = dates[(dates >= start_date) & (dates <= end_date)] print(range_dates)
结果如下 -
['2024-01-02' '2024-01-03' '2024-01-04']
使用不同的时间单位
在 NumPy 中,datetime64 和 timedelta64 对象允许您使用从年到阿秒的各种时间单位。这有助于精确操作和分析不同尺度的时间数据,例如天、小时、分钟,甚至更小的单位,如纳秒或飞秒。
NumPy 中的时间单位用字符串表示,例如"Y"表示年,"M"表示月,"D"表示天,"h"表示小时,"m"表示分钟,"s"表示秒,"ms"表示毫秒,"us"表示微秒,"ns"表示纳秒。您可以使用这些单位创建 datetime 和 timedelta 对象,或执行涉及时间间隔的算术运算。
示例
在此示例中,我们将索引 datetime64 数组以选择特定月份内的日期 -
import numpy as np # 定义一个 datetime 数组 dates = np.array(['2024-01-01', '2024-02-01', '2024-03-01', '2024-04-01'], dtype='datetime64[M]') # 按一月过滤日期 january_dates = dates[dates == np.datetime64('2024-01', 'M')] print(january_dates)
执行上述代码后,我们得到以下输出 -
['2024-01']
使用结构化数组进行高级索引
NumPy 中的结构化数组允许您存储和操作复杂数据,例如包含多个字段的记录,每个字段可以是不同类型的。
高级索引技术可帮助您访问和修改数据的特定字段或子集。结构化数组是使用 np.array() 函数创建的,该函数带有一个 dtype 参数,该参数指定字段的名称和类型。
NumPy 中的结构化数组类似于常规数组,但它允许每个元素包含多个字段,每个字段都有自己的数据类型。这些字段可以表示不同类型的数据,例如整数、浮点数或字符串,所有这些数据都组织在一个数组中。
示例
在此示例中,我们创建一个结构化数组并按日期对其进行索引,根据日期时间值选择特定记录 -
import numpy as np # 定义一个包含日期和相关数据的结构化数组 data = np.array([('2024-01-01', 100), ('2024-01-02', 200), ('2024-01-03', 300)], dtype=[('date', 'datetime64[D]'), ('value', 'i4')]) # 过滤日期晚于的数据'2024-01-01' filtered_data = data[data['date'] > np.datetime64('2024-01-01')] print(filtered_data)
输出结果为 −
[('2024-01-02', 200) ('2024-01-03', 300)]