天天看点

56.时间序列数据查询

作者:李光朱

案例导入

如下表,查询每天中午12点时的测量值。添加代码注释。

时间 测量值
2022-03-18 00:00:00 5
2022-03-18 01:00:00 9
2022-03-18 02:00:00 6
2022-03-18 03:00:00 9
2022-03-18 04:00:00 8
2022-03-18 05:00:00 10
2022-03-18 06:00:00 4
2022-03-18 07:00:00 3
2022-03-18 08:00:00 6
2022-03-18 09:00:00 3
2022-03-18 10:00:00 1
2022-03-18 11:00:00 6
2022-03-18 12:00:00 7
2022-03-18 13:00:00 4
2022-03-18 14:00:00 1
2022-03-18 15:00:00 7
2022-03-18 16:00:00 4
2022-03-18 17:00:00 10
2022-03-18 18:00:00 8
2022-03-18 19:00:00 6
2022-03-18 20:00:00 6
2022-03-18 21:00:00 1
2022-03-18 22:00:00 5
2022-03-18 23:00:00 4
2022-03-19 00:00:00 5
2022-03-19 01:00:00 5
2022-03-19 02:00:00 4
2022-03-19 03:00:00 1
2022-03-19 04:00:00 8
2022-03-19 05:00:00 6
2022-03-19 06:00:00 1
2022-03-19 07:00:00 2
2022-03-19 08:00:00 8
2022-03-19 09:00:00 4
2022-03-19 10:00:00 9
2022-03-19 11:00:00 1
2022-03-19 12:00:00 8
2022-03-19 13:00:00 2
2022-03-19 14:00:00 5
2022-03-19 15:00:00 2
2022-03-19 16:00:00 6
2022-03-19 17:00:00 9
2022-03-19 18:00:00 6
2022-03-19 19:00:00 2
2022-03-19 20:00:00 1
2022-03-19 21:00:00 8
2022-03-19 22:00:00 1
2022-03-19 23:00:00 2
2022-03-20 00:00:00 6
2022-03-20 01:00:00 6
2022-03-20 02:00:00 10
2022-03-20 03:00:00 9
2022-03-20 04:00:00 6
2022-03-20 05:00:00 7
2022-03-20 06:00:00 8
2022-03-20 07:00:00 10
2022-03-20 08:00:00 1
2022-03-20 09:00:00 3
2022-03-20 10:00:00 1
2022-03-20 11:00:00 3
2022-03-20 12:00:00 2
2022-03-20 13:00:00 10
2022-03-20 14:00:00 9
2022-03-20 15:00:00 5
2022-03-20 16:00:00 2
2022-03-20 17:00:00 4
2022-03-20 18:00:00 10
2022-03-20 19:00:00 7
2022-03-20 20:00:00 6
2022-03-20 21:00:00 10
2022-03-20 22:00:00 4
2022-03-20 23:00:00 7
2022-03-21 00:00:00 7
2022-03-21 01:00:00 9
2022-03-21 02:00:00 8
2022-03-21 03:00:00 6
2022-03-21 04:00:00 2
2022-03-21 05:00:00 6
2022-03-21 06:00:00 10
2022-03-21 07:00:00 3
2022-03-21 08:00:00 2
2022-03-21 09:00:00 1
2022-03-21 10:00:00 7
2022-03-21 11:00:00 2
2022-03-21 12:00:00 9
2022-03-21 13:00:00 1
2022-03-21 14:00:00 7
2022-03-21 15:00:00 2
2022-03-21 16:00:00 2
2022-03-21 17:00:00 10
2022-03-21 18:00:00 5
2022-03-21 19:00:00 5
2022-03-21 20:00:00 4
2022-03-21 21:00:00 6
2022-03-21 22:00:00 4
2022-03-21 23:00:00 1
2022-03-22 00:00:00 5
2022-03-22 01:00:00 10
2022-03-22 02:00:00 6
2022-03-22 03:00:00 9

文心一言提示词

打开百度“文心一言”,输入提示词:“你是pandas专家。文件路径为:D:/Samples/时间序列.xlsx。用pandas导入Excel文件中第1个工作表中的数据,将第1列作为索引列,引擎为”openpyxl”。查询每天中午12点时的测量值。添加代码注释。”

显示结果如下:

为了完成这个任务,我们可以使用pandas库来读取Excel文件中的数据,并使用DatetimeIndex来设置时间索引。由于我们需要查询每天中午12点的测量值,我们假设时间数据是小时级别的,并且每一行都代表一个时间点的测量值。

下面是一个示例代码,包括注释以解释每一步:

import pandas as pd

# 设置文件路径
file_path = 'D:/Samples/时间序列.xlsx'

# 读取Excel文件中第1个工作表的数据,将第1列作为索引列,引擎为'openpyxl'
# 注意:openpyxl引擎通常用于.xlsx文件,而xlrd引擎用于.xls文件(但在较新的pandas版本中可能需要指定)
df = pd.read_excel(file_path, sheet_name=0, index_col=0, engine='openpyxl')

# 假设第1列(即索引列)已经是datetime类型,如果不是,则需要先将其转换为datetime类型
# 例如: df.index = pd.to_datetime(df.index)

# 验证索引列是否为datetime类型
assert pd.api.types.is_datetime64_any_dtype(df.index), "Index is not datetime type"

# 创建一个新的时间索引,仅包含每天中午12点的时间
noon_times = pd.date_range(start=df.index.min(), end=df.index.max(), freq='C', normalize=True)

# normalize=True 确保时间被设置为每天的开始时间,但'C'频率实际上表示每小时的开始,
# 所以在这里我们主要是用它来确保频率是按小时计算的,然后再手动设置为12点
noon_times = noon_times.map(lambda t: t.replace(hour=12, minute=0, second=0, microsecond=0))

# 创建一个空的数据框来存储结果
noon_values = pd.DataFrame(columns=df.columns)

# 遍历noon_times列表,检查每个时间点是否在数据框的索引中,如果在,则添加到结果数据框
for noon_time in noon_times:
    if noon_time in df.index:
        noon_values = noon_values.append(df.loc[noon_time])

# 如果数据框很大,上面的循环可能不是最高效的方法。
# 一个更高效的方法是使用resample方法,但前提是数据已经是规则的时间序列
# 如果数据不是规则的,可能需要先对其进行插值或重采样

# 显示结果
print(noon_values)           

注意:

  1. 如果你的时间序列数据不是每小时都有记录(即不是规则的),那么上面的noon_times生成和遍历方法可能无法找到所有存在的中午12点的记录。
  2. 如果数据是规则的(即每天中午12点都有记录),那么可以使用resample方法更高效地找到这些记录。
  3. 如果数据中存在多个列,并且你只对某个特定列的中午12点值感兴趣,你可以通过df['column_name'].loc[noon_time]来直接访问。
  4. 上面的noon_times生成方法使用了normalize=True和freq='C',但随后手动将小时设置为12点。在大多数情况下,如果你知道数据已经是按小时排序的,你可以直接通过筛选小时为12的行来找到这些值,而不需要生成整个noon_times列表。

Python运行结果

56.时间序列数据查询

图1.Python运行结果

本合集使用的工具如下:

文心一言:3.5版本

Python编辑器:3.9.0

申明:以上结果皆为实际运行结果,如遇到无法运行可在评论区留言。部分数据来自网络,如有侵权请私信告知,感谢!