时间类型数据处理:基于Python的datetime库和pandas库

一、datetime库常用方法

日期的数据类型主要有两种:一是包含时间的datetime类型,二是不包含时间的date类型。这里的时间指具体的时、分、秒、甚至毫秒。

1、自定义日期、时间、获取本地时间、获取本地日期、获取年份、月份、月号、小时、分钟、秒、星期几

获取日期和时间的不同部分:

  • 获取年份:datetime.year
  • 获取月份:datetime.month
  • 获取月号:datetime.day
  • 获取小时:datetime.hour
  • 获取分钟:datetime.minute
  • 获取秒:datetime.second
  • 获取微妙:datetime.microsecond
  • 获取星期几,返回 0(周一)到 6(周日):datetime.weekday()
from datetime import datetime, date# 自定义日期,形如 2022-02-20
date(2022, 2, 20)# 自定义日期和时间,形如2025-01-22 12:00:00
dt = datetime(2025, 1, 22, 12, 00, 00)# 获取本地日期, 形如 2025-01-23
date.today()# 获取本地日期和时间,形如 2025-01-23 23:36:15.461326
dt = datetime.now()
dt = datetime.today()  # 与datetime.now()相同# 获取年份
dt.year# 获取月份
dt.month# 获取月号
dt.day# 获取小时
dt.hour# 获取分钟
dt.minute# 获取秒
dt.second# 获取星期几
dt.weekday()   # 返回0~6,表示周一到周日

2、日期的加减(包含时间或不包含时间):需要用到一个数据类型,timedelta(时间增量),表示时间间隔或者时间差,用于执行日期和时间的加减操作。

datetime类型时间的加减操作:

# 日期和时间(即datetime类型)的加减操作演示
from datetime import datetime, timedelta# 创建当前时间,datetime类型
now = datetime.now()# timedelta(days, weeks, hours, minutes, seconds): 创建一个timedelta对象,表示时间间隔
td = timedelta(days=5)# 计算5天后的时间
future = now + td    # 返回的是datetime类型# 计算日期差值
t = now - future   # 注意的是,两个datetime格式只能相减,但相减返回值类型是timedelta类型
print("Difference:", t)   # 输出 "-5 days, 0:00:00",即相差的天数# timedelta类型可以通过timedelta.days、timedelta.seconds等获取特定的值
print("Days difference:", t.days)   # 获取t的天数,输出-5
# 其他可用属性
print("Seconds:", t.seconds)   # 获取t的秒数,输出0

date类型的日期加减操作: 

# 日期(即date类型)的加减操作演示
from datetime import date, timedelta# 创建一个日期对象
today = date.today()
print("Today:", today)   # 输出 Today: 2025-01-23# 创建一个timedelta对象,表示时间间隔
td = timedelta(days=5)# 计算5天后的日期
future_date = today + td
print("Future Date:", future_date)   # 输出 Future Date: 2025-01-28# 计算5天前的日期
past_date = today - td
print("Past Date:", past_date)    # 输出 Past Date: 2025-01-18# 两个date类型也是只能相减,不能相加,相减得到一个timedelta类型时间增量
print(future_date - past_date)   # 输出 10 days, 0:00:00

3、字符串转日期时间、日期时间格式化输出

常见的格式符号:

  • %Y:四位数的年份(例如 2023)
  • %m:两位数的月份(例如 01 至 12)
  • %d:两位数的日期(例如 01 至 31)
  • %H:小时(24小时制,00 至 23)
  • %M:分钟(00 至 59)
  • %S:秒(00 至 59)
  • %f:微秒(000000 至 999999)
  • %a:简短的星期几(例如 Mon)
  • %A:完整的星期几(例如 Monday)
from datetime import datetime# 将字符串转日期时间
time = '2025-01-22 12:45:30'
dt = datetime.strptime(time, '%Y-%m-%d %H:%M:%S')
print(type(dt))  # <class 'datetime.datetime'>
print(dt)    # 输出 2025-01-22 12:45:30# 将日期时间转字符串
time_str = dt.strftime('%Y-%m-%d %H:%M:%S %A')
print(type(time_str))    # <class 'str'>
print(time_str)  # 2025-01-22 12:45:30 Wednesday

二、pands库中常用于时间分析的方法

1、使用pd.to_datetime()转换时间列

import pandas as pd# 创建包含日期字符串的 DataFrame
data = {'date': ['2023-01-01', '2023-01-02', '2023-01-03'],'value': [10, 15, 20]}df = pd.DataFrame(data)# 将 'date' 字符串列转换为 datetime 类型
df['date'] = pd.to_datetime(df['date'])print(df)
# 输出:
#      date       value
# 0 2023-01-01     10
# 1 2023-01-02     15
# 2 2023-01-03     20

2、使用pd.date_range()创建时间序列

date_range()常用参数说明:

  • start:必需参数,指定日期范围的开始日期(字符串或datetime对象)
  • end:可选参数,指定日期范围的结束日期(字符串或datetime对象)
  • periods:可选参数,指定生成的日期数量,而不是通过结束日期来确定结束
  • freq:可选参数,指定日期的频率(默认频率是'D',即每天),如天、小时、月等。

常见的频率表示法有:

  • 'D':每天
  • 'B':工作日(周一到周五)
  • 'h':每小时
  • 'T''min':每分钟
  • 's':每秒
  • 'MS':每月(每月初)
  • 'ME':每月(每月末)
  • 'QS':每季度(每季度初)
  • 'QE':每季度(每季度末)
  • 'YS':每年(每年末)
  • 'YE':每年(每年末)
  • 'W':每周(每周的周日)

示例:

import pandas as pd# 生成日期范围,使用了end参数就不能用periods参数
dates = pd.date_range('2023-01-01', end='2023-01-03', freq='D')
print(dates)   # 输出 DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03'])# 生成日期范围,使用了periods参数就不能用end参数
dates = pd.date_range('2023-01-01', periods=3, freq='ME')
print(dates)   # 输出 DatetimeIndex(['2023-01-31', '2023-02-28', '2023-03-31'])

3、使用df.set_index()和df.resample()进行重采样

假设你有一个包含日期和数值的 DataFrame,现在你想按月重采样并使用聚合函数计算每月的平均值:

# 创建包含日期和数值的 DataFrame
data = {'date': ['2023-01-01', '2023-01-15', '2023-02-01', '2023-02-15'],'value': [10, 20, 30, 40]}df = pd.DataFrame(data)# 将 'date' 列转换为 datetime 类型并设置为索引
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)# 按月重采样并计算平均值
df_resampled = df.resample('ME').mean()print(df_resampled)# 输出:
#             value
# date             
# 2023-01-31   15.0     表示一月份的平均值
# 2023-02-28   35.0     表示二月份的平均值

4、使用df.rolling()计算移动平均

假设你有一个时间序列数据,你想计算3天的移动平均:

# 创建一个时间序列数据
data = {'date': pd.date_range('2023-01-01', periods=6, freq='D'),'value': [10, 20, 30, 40, 50, 60]}df = pd.DataFrame(data)
df.set_index('date', inplace=True)# 计算3天移动平均
df['rolling_mean'] = df['value'].rolling(window=3).mean()print(df)# 输出:
#             value      rolling_mean
# date                           
# 2023-01-01     10           NaN
# 2023-01-02     20           NaN
# 2023-01-03     30          20.0
# 2023-01-04     40          30.0
# 2023-01-05     50          40.0
# 2023-01-06     60          50.0

5、使用df.diff()计算差值

假设你想计算每一天与前一天的差值(即变化量):

# 创建一个时间序列数据
data = {'date': pd.date_range('2023-01-01', periods=6, freq='D'),'value': [10, 20, 30, 40, 50, 60]}df = pd.DataFrame(data)
df.set_index('date', inplace=True)# 计算每日变化量
df['daily_change'] = df['value'].diff()print(df)# 输出:
#               value     daily_change
# date                           
# 2023-01-01     10           NaN
# 2023-01-02     20          10.0
# 2023-01-03     30          10.0
# 2023-01-04     40          10.0
# 2023-01-05     50          10.0
# 2023-01-06     60          10.0

6、使用 df.between_time() 筛选时间范围(无法筛选特定日期范围数据)

假设你有一个包含日期时间的 DataFrame,现在你想筛选某一特定时间范围内的数据:

# 创建包含日期时间数据的 DataFrame
data = {'datetime': pd.date_range('2023-01-01 08:00', periods=6, freq='h'),'value': [10, 20, 30, 40, 50, 60]}df = pd.DataFrame(data)
df.set_index('datetime', inplace=True)# 筛选 09:00 到 17:00 之间的数据
df_filtered = df.between_time('09:00', '17:00')print(df_filtered)
# 输出:
#                        value
# datetime                  
# 2023-01-01 09:00:00     20
# 2023-01-01 10:00:00     30
# 2023-01-01 11:00:00     40
# 2023-01-01 12:00:00     50
# 2023-01-01 13:00:00     60

7、使用 .iloc 筛选特定日期范围内的数据

# 创建包含日期时间数据的 DataFrame
data = {'datetime': pd.date_range('2023-01-01 08:00', periods=5, freq='ME'),'value': [10, 20, 30, 40, 50]}df = pd.DataFrame(data)
df.set_index('datetime', inplace=True)# 筛选特定日期范围的数据
start_date = '2023-01-01'
end_date = '2023-10-02'df_filtered = df.loc[start_date:end_date]print(df_filtered)
# 输出:
#                        value
# datetime                  
# 2023-01-31 08:00:00     10
# 2023-02-28 08:00:00     20
# 2023-03-31 08:00:00     30
# 2023-04-30 08:00:00     40
# 2023-05-31 08:00:00     50

# 文章如有错误,欢迎大家指正,我们下期文章见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低代码可视化-转盘小游戏可视化-代码生成器

转盘小程序是一种互动工具&#xff0c;它通过模拟真实的转盘抽奖或决策体验&#xff0c;为用户提供了一种有趣且公平的选择方式。以下是对转盘小程序的详细介绍&#xff1a; 转盘小程序的应用场景 日常决策&#xff1a;转盘小程序可以帮助用户解决日常生活中的选择困难问题&a…

MongoDB文档查询

一、实验目的 1. 理解MongoDB文档数据库的基本概念和特性。 2. 掌握在MongoDB中创建集合和插入文档数据的方法。 3. 学习使用MongoDB进行文档查询操作&#xff0c;包括查询、过滤和排序等。 二、实验环境准备 1. JAVA环境准备&#xff1a;确保Java Development Kit (J…

速通Docker === 使用最佳实践总结

目录 主要使用步骤 1. 命令 2. 网络 3. 存储 卷存储&#xff08;Volumes&#xff09; 目录挂载&#xff08;Bind Mounts&#xff09; 比较 4. 环境变量 5. 端口 示例&#xff1a;启动 MySQL 容器 解释&#xff1a; 总结 Docker 是一个开源的应用容器引擎&#xff0…

Postgresql源码(140)理解PG的编译流程(make、Makefile、Makefile.global.in)

PG16 PG中使用的makefile看起来代码比较多&#xff0c;但是实际逻辑比较简单&#xff0c;这里做一些抽象总结。 总结 Makefile.global.in的$(recurse)宏自动生成了target&#xff0c;可以方便的进入内存目录进行编译。 all: all-common-recurse all-common-recurse: submak…

c语言中的数组(上)

数组的概念 数组是⼀组相同类型元素的集合&#xff1b; 数组中存放的是1个或者多个数据&#xff0c;但是数组元素个数不能为0。 数组中存放的多个数据&#xff0c;类型是相同的。 数组分为⼀维数组和多维数组&#xff0c;多维数组⼀般⽐较多⻅的是⼆维数组。 数组创建 在C语言…

戴尔电脑设置u盘启动_戴尔电脑设置u盘启动多种方法

最近有很多网友问&#xff0c;戴尔台式机怎么设置u盘启动&#xff0c;特别是近两年的戴尔台式机比较复杂&#xff0c;有些网友不知道怎么设置&#xff0c;其实设置u盘启动有两种方法&#xff0c;下面小编教大家戴尔电脑设置u盘启动方法。 戴尔电脑设置u盘启动方法一、戴尔进入b…

2【选修】再探宝可梦、数码宝贝分类器

1 Pokemon/Digimon Classifier 1.1 Observation 1.2 Function 1.3 Loss 1.4 Training Examples – OOPS what do we want? 2 What is the probability of sampling bad D t r a i n D_{train} Dtrain​ 2.1 Theroy – Larger N N N smaller ∣ H ∣ |H| ∣H∣ 2.2…

微信小程序中实现背景图片完全覆盖显示,可以通过设置CSS样式来实现

wxml页面代码 <view class"beijing"></view>wxss样式代码 /* pages/beiJing/beiJing.wxss */ .beijing {background-image: url("https://www.qipa250.com/qipa.jpg");/* 定位&#xff1a;绝对定位 */position: absolute;/* 上下左右都定位到…

Mongodb 慢查询日志分析 - 1

Mongodb 慢查询日志分析 使用 mloginfo 处理过的日志会在控制台输出, 显示还是比较友好的. 但是如果内容较大, 就不方便查看了, 如果可以导入到 excel 就比较方便筛选/排序. 但是 mloginfo 并没有提供生成到 excel 的功能. 可以通过一个 python 脚本辅助生成: import pandas…

ASP.NET Core 6.0 如何处理丢失的 Startup.cs 文件

介绍 .NET 6.0 已经发布&#xff0c;ASP.NET Core 6.0 也已发布。其中有不少变化让很多人感到困惑。例如&#xff0c;“谁动了我的奶酪”&#xff0c;它在哪里Startup.cs&#xff1f;在这篇文章中&#xff0c;我将深入研究这个问题&#xff0c;看看它移动到了哪里以及其他变化。…

欧几里得算法求最小公倍数和最大公约数

一.最大公约数 gcd(a,b)gcd(b,a%b) 递归式,当且仅当b0&#xff0c;易得0和a的公约数为a.(可作为递归的出口) 证明&#xff1a; int gcd(int a, int b) {if (b 0) return a;else return gcd(b, a % b); } 二.最小公倍数 给定整数a b&#xff0c;求a b的最小公倍数 有图可知…

文档解析:PDF里的复杂表格、少线表格如何还原?

PDF中的复杂表格或少线表格还原通常需要借助专业的工具或在线服务&#xff0c;以下是一些可行的方法&#xff1a; 方法一&#xff1a;使用在线PDF转换工具 方法二&#xff1a;使用桌面PDF编辑软件 方法三&#xff1a;通过OCR技术提取表格 方法四&#xff1a;手动重建表格 …

局域网中 Windows 与 Mac 互相远程连接的最佳方案

由于工作需要&#xff0c;经常需要远程连接或登录到几台不同的工作用机上进行操作。 下面基于免费、高体验等基本诉求&#xff0c;简要记录几种不同场景下的实践方案选择&#xff0c;仅供参考。如您有更简单且更优的方案&#xff0c;欢迎一起探讨。 1 远程桌面连接的几种不同…

二叉树的所有路径(力扣257)

因为题目要求路径是从上到下的&#xff0c;所以最好采用前序遍历。这样可以保证按从上到下的顺序将节点的值存入一个路径数组中。另外&#xff0c;此题还有一个难点就是如何求得所有路径。为了解决这个问题&#xff0c;我们需要用到回溯。回溯和递归不分家&#xff0c;每递归一…

Centos 修改历史读录( HISTSIZE)

history命令 -c #清空命令历史 -r #读历史文件附加到历史列表 -w #保存历史列表到指定的历史文件 命令历史相关环境变量 HISTSIZE #命令历史记录的条数 HISTFILE #指定历史文件&#xff0c;默认为~/.bash_history HISTFILESIZE #命令历史文件记录历史的条数 以上变量可以 exp…

【C++高并发服务器WebServer】-2:exec函数簇、进程控制

本文目录 一、exec函数簇介绍二、exec函数簇 一、exec函数簇介绍 exec 函数族的作用是根据指定的文件名找到可执行文件&#xff0c;并用它来取代调用进程的内容&#xff0c;换句话说&#xff0c;就是在调用进程内部执行一个可执行文件。 exec函数族的函数执行成功后不会返回&…

TDengine 与上海电气工业互联网平台完成兼容性认证

在工业数字化转型和智能化升级的浪潮中&#xff0c;企业对高效、可靠的数据管理解决方案的需求日益增长。特别是在风电智能运维、火电远程运维、机床售后服务等复杂多样的工业场景下&#xff0c;如何实现海量设备和时序数据的高效管理&#xff0c;已经成为推动行业升级的关键。…

Jenkins pipline怎么设置定时跑脚本

目录 示例&#xff1a;在Jenkins Pipeline中设置定时触发 使用pipeline指令设置定时触发 使用Declarative Pipeline设置定时触发 使用Scripted Pipeline设置定时触发 解释Cron表达式 保存和应用配置 小结 在Jenkins中&#xff0c;定时跑脚本&#xff08;例如定时执行Pip…

kotlin的协程的基础概念

Kotlin的协程是一种用于简化异步编程的强大工具。 理解协程的基础概念可以帮助开发者有效地利用其能力。 以下是Kotlin协程的一些关键基础概念&#xff1a; 协程&#xff08;Coroutines&#xff09; &#xff1a; 协程是一种用于处理并发任务的编程模型&#xff0c;它可以在单…

machine learning knn算法之使用KNN对鸢尾花数据集进行分类

通过导入必要的scikit-learn导入必要的库&#xff0c;加载给定的数据&#xff0c;划分测试集和训练集之后训练预测和评估即可 具体代码如下&#xff1a; import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split f…