时间序列数据偏移

给定一个日期或时间作为起始值,再指定一个日期或时间间隔,即偏移,计算最终日期或时间。这个日期间隔,可以是普通的日期,也可以是工作日。

日期时间偏移

【问题描述】

指定一个起始日期或时间,再指定一个日期或时间长度作为偏移,计算终止日期或时间。

【示例7-7】

本例使用的Excel文件的完整路径为“D:/Samples/ch07/02 日期时间偏移计算/时间序列.xlsx”。该文件打开后如图7-2所示,利用“生产日期”列和“保质期”列计算每种食品的过期日期。

Document Image

图7-2 计算食品的过期日期

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家,文件路径为:D:/Samples/ch07/02 日期时间偏移计算/时间序列.xlsx。该Excel文件的第一个工作表中A-C列为给定数据,A-C列分别为“食品名称”、“生产日期”和“保质期”。用pandas导入Excel文件的数据,导入前3行,前3列数据,引擎为"openpyxl"。在导入的数据中,利用“生产日期”列和“保质期”列计算每种食品的过期日期,添加到“过期日期”列。注意,保质期数据的单位为月。输出修改后的表数据。添加代码注释。

2. 代码

  • 根据提示词得到类似下面的代码:
code.python
import pandas as pd
# 读取Excel文件中的第一个工作表,前3行,前3列数据
df = pd.read_excel(
    'D:/Samples/13 日期时间数据的整理/时间段/已知起始日期和间隔天数计算终止日期/食品的过期日期.xlsx',
    sheet_name=0,
    usecols='A:C',
    nrows=3,
    engine='openpyxl'
)
# 计算每种食品的过期日期并添加到“过期日期”列
df['过期日期'] = df.apply(lambda x: x.生产日期 + pd.DateOffset(months=x.保质期), axis=1)
# 输出修改后的表数据
print(df)

3. 使用代码

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,在IDLE Shell窗口输出添加过期日期的数据。

code.python
>>> == RESTART: D:/Samples/1.py =
   食品名称       生产日期  保质期       过期日期
0  速冻饺子 2023-03-12    3 2023-06-12
1  速冻包子 2023-02-25    6 2023-08-25
2  速冻馄饨 2023-04-20    2 2023-06-20

【知识点扩展】

本例用pandas的DateOffset函数计算过期日期,指定该函数的months参数的值为保质期,得到偏移值,加上生产日期就得到过期日期。

工作日偏移

【问题描述】

指定日期偏移为工作日的情况。

【示例7-8】

本例使用的Excel文件的完整路径为“D:/Samples/ch07/02 日期时间偏移计算/工作日.xlsx”。该文件打开后如图7-3所示,请利用“办证日期”列数据计算取证日期。

Document Image

图7-3 计算食品的过期日期

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家,文件路径为:D:/Samples/ch07/02 日期时间偏移计算/工作日.xlsx。该Excel文件的第一个工作表中A-B列为给定数据,A-B列分别为“姓名”和“办证日期”。用pandas导入Excel文件的数据,导入前7行,前2列数据,引擎为"openpyxl"。办证时间为10个工作日,请利用“办证日期”列数据计算取证日期,并添加到“取证日期”列。输出修改后的表数据。添加代码注释。

2. 代码

  • 根据提示词得到类似下面的代码:
code.python
import pandas as pd
# 读取 Excel 文件中的数据,选择第一个工作表,前七行和前两列,引擎为 openpyxl
df = pd.read_excel('D:/Samples/ch07/02 日期时间偏移计算/工作日.xlsx',
                   sheet_name=0,
                   nrows=7,
                   usecols="A:B",
                   engine="openpyxl")
# 根据“办证日期”列数据计算取证日期,办证时间为 10 个工作日,并将结果添加到“取证日期”列
df["取证日期"] = df["办证日期"] + pd.offsets.BDay(10)
# 输出修改后的表数据
print(df)

3. 使用代码

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,在IDLE Shell窗口输出添加取证日期的数据。

code.python
>>> == RESTART: D:/Samples/1.py =
姓名       办证日期       取证日期
6	  王晓晓 2023-01-12 2023-01-26
6	  公孙磊 2023-01-14 2023-01-27
2  欧阳旭 2023-01-16 2023-01-30
3   单勇 2023-01-19 2023-02-02
4   赵琳 2023-01-22 2023-02-03
5  李迅雷 2023-02-01 2023-02-15
6   党春 2023-02-09 2023-02-23

【知识点扩展】

pandas中用OffSets对象的BDay方法得到指定工作日天数的偏移值。