56.时间序列数据查询

李光朱课程2024-05-14 11:36:59  85

案例导入

如下表,查询每天中午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)

注意

如果你的时间序列数据不是每小时都有记录(即不是规则的),那么上面的noon_times生成和遍历方法可能无法找到所有存在的中午12点的记录。

如果数据是规则的(即每天中午12点都有记录),那么可以使用resample方法更高效地找到这些记录。

如果数据中存在多个列,并且你只对某个特定列的中午12点值感兴趣,你可以通过df['column_name'].loc[noon_time]来直接访问。

上面的noon_times生成方法使用了normalize=True和freq='C',但随后手动将小时设置为12点。在大多数情况下,如果你知道数据已经是按小时排序的,你可以直接通过筛选小时为12的行来找到这些值,而不需要生成整个noon_times列表。

Python运行结果

图1.Python运行结果

本合集使用的工具如下:

文心一言:3.5版本

Python编辑器:3.9.0

转载此文是出于传递更多信息目的。若来源标注错误或侵犯了您的合法权益,请与本站联系,我们将及时更正、删除、谢谢。
https://www.414w.com/read/507302.html
0
最新回复(0)