Pandas数据分析固定时间点和时间差

目录
  • 前言
  • 时间属性
  • 时间方法
  • 时间缺失值
  • .dt 时间访问器
  • 时长数据
    • 时间差
    • 时长属性

前言

pandas处理时间的对象有很多,分别表示不同的作用。

本次介绍固定时间对象和时间长对象。

还是先导入包:

import numpy as np
import pandas as pd
import datetime

固定时间 时间点对象的建立

时间点就表示一个时刻的具体时间,比如现在是2022年8月10日16:31:56。

时间对象的建立有很多方法。

#使用 python 的 datetime 库,至少需要年月日

datetime.datetime.now()

#指定时间
datetime.datetime(2022,8,10,10,5)

#pandas 等第三方库都是在datetime建立时间对象的
#pd.Timestamp() 是定义时间的主要函数,代替 python 中的 datetime.datetime 对象。
pd.Timestamp(datetime.datetime(2020, 6, 8))

指定时间字符串

pd.Timestamp('2012-05-01')
# Timestamp('2012-05-01 00:00:00')
pd.Timestamp('2017-01-01T12')
# Timestamp('2017-01-01 12:00:00')

#指定时间位置数字,可以依次定义 year, month, day,hour, minute, second, microsecond

pd.Timestamp(2012, 5, 1)
# Timestamp('2012-05-01 00:00:00')
pd.Timestamp(2017, 1, 1, 12)
# Timestamp('2017-01-01 12:00:00')
pd.Timestamp(year=2017, month=1, day=1, hour=12)
# Timestamp('2017-01-01 12:00:00')
#解析时间戳
pd.Timestamp(1513393355.5, unit='s') # 单位为秒
# Timestamp('2017-12-16 03:02:35.500000')
#指定时区
pd.Timestamp(1513393355, unit='s', tz='US/Pacific')
# Timestamp('2017-12-15 19:02:35-0800', tz='US/Pacific')
# 指定为北京时间
pd.Timestamp(1513393355, unit='s', tz='Asia/Shanghai')
# Timestamp('2017-12-16 11:02:35+0800', tz='Asia/Shanghai')
 #特殊时间
#以下可取得当前时间,从而可通过属性取到今天日期、年份等信息:
pd.Timestamp('today')
pd.Timestamp('now')
# Timestamp('2022-08-10 10:11:56.532981')
pd.Timestamp('today').date() # 只取日期

 #也可以计算出昨天、明天等信息:
# 昨天
pd.Timestamp('now')-pd.Timedelta(days=1)
# Timestamp('2020-06-08 16:14:39.254365')
# 明天
pd.Timestamp('now')+pd.Timedelta(days=1)
# Timestamp('2020-06-10 16:15:28.019039')
# 当月初,一日
pd.Timestamp('now').replace(day=1)
# Timestamp('2020-06-01 16:15:28.019039')
 #时间限制
#由于 Pandas 以纳秒粒度表示时间戳,因此可以使用64位整数表示的时间跨度限制为大约584年:
pd.Timestamp.min
# Timestamp('1677-09-21 00:12:43.145225')
pd.Timestamp.max
# Timestamp('2262-04-11 23:47:16.854775807')

时间属性

一个具体的时间包含了非常丰富的信息,如年份、在周几、在几月、在哪个季度,需要我们进行属性的读取。

#先创建一个时间
time = pd.Timestamp('now')
time

 以下是丰富的时间属性:

time.asm8 # 返回 numpy datetime64格式(以纳秒为单位)。
#numpy.datetime64('2022-08-10T09:58:52.365676000')
time.dayofweek # 1 周几,周一为0
time.day_of_week # 同上
time.dayofyear # 161, 一年的第几天
time.day_of_year # 同上
time.days_in_month # 30 当月有多少天
time.daysinmonth # 30 同上
time.freqstr # None, 周期字符
time.is_leap_year # True 是否闰年,公历的
time.is_month_end # False 是否当月最后一天
time.is_month_start # False 是否当月第一天
time.is_quarter_end # False 是否当季最后一天
time.is_quarter_start # False 是否当季第一天
time.is_year_end # 是否当年最后一天
time.is_year_start # 是否当年第一天
time.quarter # 2 当前季度数
# 如指定会返回类似 <DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>
time.tz # None 当前时区别名
time.week # 24 当年第几周
time.weekofyear # 24 同上
time.day # 9 日
time.fold # 0
time.freq # None 频度周期
time.hour # 16
time.microsecond # 890462
time.minute # 46
time.month # 6
time.nanosecond # 0
time.second # 59
time.tzinfo # None
time.value # 1591721219890462000
time.year # 2020

时间方法

time = pd.Timestamp('now', tz='Asia/Shanghai')
# Timestamp('2020-06-09 16:55:58.027896+0800', tz='Asia/Shanghai')
#方法如下:
# 转换为指定时区
time.astimezone('UTC')
# Timestamp('2020-06-09 08:55:58.027896+0000', tz='UTC')
# 转换单位,向上舍入
time.ceil('s') # 转为以秒为单位
# Timestamp('2020-06-09 16:55:59+0800', tz='Asia/Shanghai')
time.ceil('ns') # 转为以纳秒为单位
time.ceil('d') # 保留日
time.ceil('h') # 保留时
# 转换单位, 为向下舍入
time.floor('h') # 保留时
# Timestamp('2020-06-09 17:00:00+0800', tz='Asia/Shanghai')
# 类似四舍五入
time.round('h') # 保留时
# 返回星期名
time.day_name() # 'Tuesday'
# 月份名称
time.month_name() # 'June'

# 将时间戳规范化为午夜,保留tz信息。
time.normalize()
# Timestamp('2020-06-09 00:00:00+0800', tz='Asia/Shanghai')

# 时间元素替换 datetime.replace,可处理纳秒。
time.replace(year=2019) # 年份换为2019年
# Timestamp('2019-06-09 17:14:44.126817+0800', tz='Asia/Shanghai')
time.replace(month=8) # 月份换为8月
# Timestamp('2020-08-09 17:14:44.126817+0800', tz='Asia/Shanghai')

# 转为周期类型,将丢失时区
time.to_period(freq='h') # 周期为小时
# Period('2020-06-09 17:00', 'H')

# 转为指定时区
time.tz_convert('UTC') # 转为 utc 时间
# Timestamp('2020-06-09 09:14:44.126817+0000', tz='UTC')
# 本地化时区转换
time = pd.Timestamp('now')
time.tz_localize('Asia/Shanghai')
# Timestamp('2020-06-09 17:32:47.388726+0800', tz='Asia/Shanghai')
time.tz_localize(None) # 删除时区

时间缺失值

pd.Timestamp(pd.NaT)
#参与计算
pd.NaT+pd.Timestamp('20201001')

.dt 时间访问器

#对于时间序列数据,可以使用 s.dt.xxx 的形式来访问它们的属性和调用它们的方法:

s = pd.Series(pd.date_range('2020-01-01', periods=3, freq='d'))
s.dt.date
s.dt.time
s.dt.timetz
s.dt.year
s.dt.month
s.dt.day
s.dt.hour
s.dt.minute
s.dt.second
s.dt.microsecond
s.dt.nanosecond
s.dt.week
s.dt.weekofyear
s.dt.dayofweek
s.dt.weekday
s.dt.dayofyear
s.dt.quarter
s.dt.is_month_start
s.dt.is_month_end
s.dt.is_quarter_start
s.dt.is_quarter_end
s.dt.is_year_start
s.dt.is_year_end
s.dt.is_leap_year
s.dt.daysinmonth
s.dt.days_in_month
s.dt.tz
s.dt.freq
s.dt.to_period
s.dt.to_pydatetime
s.dt.tz_localize
s.dt.tz_convert
s.dt.normalize
s.dt.strftime
s.dt.round
s.dt.floor
s.dt.ceil
s.dt.month_name
s.dt.day_name
s.dt.qyear
s.dt.start_time
s.dt.end_time
s.dt.days
s.dt.seconds
s.dt.microseconds
s.dt.nanoseconds
s.dt.components
s.dt.to_pytimedelta
s.dt.total_seconds

# 个别用法举例
s.dt.tz_localize('UTC').dt.tz_convert('US/Eastern')
s.dt.strftime('%Y/%m/%d')

时长数据

时间差

和上面的时间点比起来,时间差就表示一个时间的长度,一天一小时这种时间差。

Timedelta 数据类型用来代表时间增量,两个固定时间相减会产生时差: 

# 两个固定时间相减
pd.Timestamp('2020-11-01 15') - pd.Timestamp('2020-11-01 14')
# Timedelta('0 days 01:00:00')
pd.Timestamp('2020-11-01 08') - pd.Timestamp('2020-11-02 08')
# Timedelta('-1 days +00:00:00')

按以下格式传入字符串:

# 一天
pd.Timedelta('1 days')
# Timedelta('1 days 00:00:00')
pd.Timedelta('1 days 00:00:00')
# Timedelta('1 days 00:00:00')
pd.Timedelta('1 days 2 hours')
# Timedelta('1 days 02:00:00')
pd.Timedelta('-1 days 2 min 3us')
# Timedelta('-2 days +23:57:59.999997'
用关键字参数指定时间:
pd.Timedelta(days=5, seconds=10)
# Timedelta('5 days 00:00:10')
pd.Timedelta(minutes=3, seconds=2)
# Timedelta('0 days 00:03:02')

# 可以实现指定分钟有多少天,多少小时
pd.Timedelta(minutes=3242)

 使用带周期量的偏移量别名:

# 一天
pd.Timedelta('1D')
# Timedelta('1 days 00:00:00')
# 两周
pd.Timedelta('2W')
# Timedelta('14 days 00:00:00')
# 一天2小时3分钟4秒
pd.Timedelta('1D2H3M4S')

带单位的整型数字:

# 一天
pd.Timedelta(1, unit='d')
# 100 秒
pd.Timedelta(100, unit='s')
# Timedelta('0 days 00:01:40')
# 4 周
pd.Timedelta(4, unit='w')
# Timedelta('28 days 00:00:00')

Python内置的datetime.timedelta或者Numpy的np.timedelta64:

# 一天10分钟
pd.Timedelta(datetime.timedelta(days=1, minutes=10))
# Timedelta('1 days 00:10:00')

# 100纳秒
pd.Timedelta(np.timedelta64(100, 'ns'))
# Timedelta('0 days 00:00:00.000000100')

负值 

# 负值
pd.Timedelta('-1min')
# Timedelta('-1 days +23:59:00')

# 空值,缺失值
pd.Timedelta('nan')
# NaT

# pd.Timedelta('nat')
# NaT

也可以用 DateOffsets (Day, Hour, Minute, Second, Milli, Micro, Nano) 来构建:

pd.Timedelta(pd.offsets.Second(2))
# Timedelta('0 days 00:00:02')

#to_timedelta,可以直接生成单个时长数据:
pd.to_timedelta('1 days 06:05:01.00003')
# Timedelta('1 days 06:05:01.000030')
pd.to_timedelta('15.5us')
# Timedelta('0 days 00:00:00.000015')

pd.to_timedelta(pd.offsets.Day(3))
# Timedelta('3 days 00:00:00')

pd.to_timedelta('15.5min')
# Timedelta('0 days 00:15:30')

pd.to_timedelta(124524564574835)
# Timedelta('1 days 10:35:24.564574835')

时长可以相加:

pd.Timedelta(pd.offsets.Day(2)) + pd.Timedelta(pd.offsets.Second(2)) + pd.Timedelta('00:00:00.000123')
# Timedelta('2 days 00:00:02.000123')

以下是一些操作示例:

s = pd.Series(pd.date_range('2012-1-1', periods=3, freq='D'))
td = pd.Series([pd.Timedelta(days=i) for i in range(3)])
df = pd.DataFrame({'A': s, 'B': td})
df

df['C'] = df['A'] + df['B']
df

df.dtypes

时长属性

tdt=pd.Timedelta('10 days 9 min 3 sec')
tdt.days
tdt.seconds
tdt.value #(时间戳)

到此这篇关于Pandas数据分析固定时间点和时间差的文章就介绍到这了,更多相关Pandas固定时间点内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python Pandas高级教程之时间处理

    目录 简介 时间分类 Timestamp DatetimeIndex date_range 和 bdate_range origin 格式化 Period DateOffset 作为index 切片和完全匹配 时间序列的操作 Shifting 频率转换 Resampling 重新取样 总结 简介 时间应该是在数据处理中经常会用到的一种数据类型,除了Numpy中datetime64 和 timedelta64 这两种数据类型之外,pandas 还整合了其他python库比如  scikits.ti

  • Pandas 时间序列分析中的resample函数

    Pandas 中的resample函数用于各种频率的转换工作. resample的参数如下: 参数 描述 freq 转换频率 axis=0 重采样的轴 closed=None 在降采样中,设置各时间段哪段是闭合的 label=None 在降采样中,如何设置聚合值的标签 下面着重介绍: closed和label参数label就是8:00 -8:30会被标记成8:00还是8:30closed就是哪段是闭区间 w=pd.date_range(start = '2021/2/1', periods=10

  • pandas时间序列之pd.to_datetime()的实现

    目录 解析来自各种来源和格式的时间序列信息 时间序列解析之小试牛刀 时间序列解析之磨刀霍霍 1. 指定识别的format 2. 遇到DataFrame 3. 遇到不能识别的处理方法 4. origin的用法 解析来自各种来源和格式的时间序列信息 pd.to_datetime( arg,#int, float, str, datetime, list, tuple, 1-d array, Series DataFrame/dict-like errors='raise',# {'ignore',

  • pandas 时间偏移的实现

    目录 1 timedelta 1.1 时间偏移单位为周 1.2 时间偏移单位为天 1.3 时间偏移单位为小时 1.4 时间偏移单位为分钟 1.5 时间偏移单位为秒 1.6 时间偏移单位为毫秒 1.7 时间偏移单位为微秒 2 date offset 2.1 时间偏移单位为天 时间偏移就是在指定时间往前推或者往后推一段时间,即加减一段时间之后的时间 python中主要有2种方式:一种是借助timedelta,另一种是pandas中的日期偏移量date offset 1 timedelta 1.1 时

  • pandas实现datetime64与unix时间戳互转

    目录 datetime64与unix时间戳互转 unix 时间戳与pandas中的Timestamp互转 datetime模块 pandas默认时间格式转换为unix间戳 举个栗子 样例 datetime64与unix时间戳互转 在用pandas处理数据时,经常要处理一些时间类型数据,经常把pandas时间类型与datetime模块,还有python自带的time模块搞混淆,记录之. unix 时间戳与pandas中的Timestamp互转 import time def unixToTime(

  • Pandas中常用的七个时间戳处理函数使用总结

    目录 1.查找特定日期的某一天的名称 2.执行算术计算 3.使用时区信息来操作转换日期时间 4.使用日期时间戳 5.创建日期系列 6.操作日期序列 7.使用时间戳数据对数据进行切片 在零售.经济和金融等行业,数据总是由于货币和销售而不断变化,生成的所有数据都高度依赖于时间.如果这些数据没有时间戳或标记,实际上很难管理所有收集的数据.Python 程序允许我们使用 NumPy timedelta64 和 datetime64 来操作和检索时间序列数据.sklern库中也提供时间序列功能,但 Pan

  • pandas中的Timestamp只保留日期不显示时间

    目录 Timestamp只保留日期不显示时间 Timestamp.date() pandas从日期属性中提取年月日 将日期属性拆分成年.月.日 Timestamp只保留日期不显示时间 Timestamp.date() 拿到DataFrame中的一个时间戳后,加一个**.date()**即可 for time in df['日期']):     print(time.date()) pandas从日期属性中提取年月日 在数据挖掘过程中,日期属性是非数值属性, 不能直接输入到模型,将日期属性拆分成年

  • pandas时间序列之如何将int转换成datetime格式

    目录 将int转换成datetime格式 原始时间格式 pandas 时间数据处理 转化时间类型 生成时间序列 提取时间属性 计算时间间隔 计算时间推移 获取当前机器的支持的最大时间和最小时间 将int转换成datetime格式 原始时间格式 users['timestamp_first_active'].head() 原始结果: 0 200903190432551 200905231748092 200906092312473 200910310601294 20091208061105Nam

  • Pandas处理时间序列数据操作详解

    目录 前言 一.获取时间 二.时间索引 三.时间推移 前言 一般从数据库或者是从日志文件读出的数据均带有时间序列,做时序数据处理或者实时分析都需要对其时间序列进行归类归档.而Pandas是处理这些数据很好用的工具包.此篇博客基于Jupyter之上进行演示,本篇博客的愿景是希望我或者读者通过阅读这篇博客能够学会方法并能实际运用.希望读者看完能够提出问题或者看法,博主会长期维护博客做及时更新.纯分享,希望大家喜欢. 一.获取时间 python自带datetime库,通过调用此库可以获取本地时间 fr

  • Pandas数据分析固定时间点和时间差

    目录 前言 时间属性 时间方法 时间缺失值 .dt 时间访问器 时长数据 时间差 时长属性 前言 pandas处理时间的对象有很多,分别表示不同的作用. 本次介绍固定时间对象和时间长对象. 还是先导入包: import numpy as np import pandas as pd import datetime 固定时间 时间点对象的建立 时间点就表示一个时刻的具体时间,比如现在是2022年8月10日16:31:56. 时间对象的建立有很多方法. #使用 python 的 datetime 库

  • python数据分析之时间序列分析详情

    目录 前言 时间序列的相关检验 白噪声检验 平稳性检验 自相关和偏相关分析 移动平均算法 简单移动平均法 简单指数平滑法 霍尔特(Holt)线性趋势法 Holt-Winters季节性预测模型 ARIMA模型 ARMA模型 针对ARMA模型自动选择合适的参数 时序数据的异常值检测 前言 时间序列分析是基于随机过程理论和数理统计学方法: 每日的平均气温 每天的销售额 每月的降水量 时间序列分析主要通过statsmodel库的tsa模块完成: 根据时间序列的散点图,自相关函数和偏自相关函数图识别序列是

  • Pandas数据分析常用函数的使用

    目录 一.数据导入导出 二.数据加工处理 三.列表格式设置 Pandas是数据处理和分析过程中常用的Python包,提供了大量能使我们快速便捷地处理数据的函数和方法,在此主要整理数据分析过程pandas包常用函数,以便查询.更多函数学习详见padans官网 一.数据导入导出 pandas提供了一些用于将表格型数据读取为DataFrame对象函数,如read_csv,read_table.输入pd.read后,按Tab键,系统将把以read开头的函数和模块都列出来,根据需要读取的文件类型选取. #

  • PHP实现时间比较和时间差计算的方法示例

    本文实例讲述了PHP实现时间比较和时间差计算的方法.分享给大家供大家参考,具体如下: 示例1: <?php //PHP时间比较和时间差计算: //(1).比较两个绝对时间的大小 header("Content-type: text/html; charset=utf-8"); date_default_timezone_set('PRC'); $zero1=date("Y-m-d h:i:s"); //$zero1="2010-11-29 21:07

  • Linux 判断文件修改时间和系统时间差

     Linux 判断文件修改时间和系统时间差 #!/bin/bash timestamp=`date +%s` filepath=/root/yuhui/ta-2016030307.log if [ -f $filepath ]; then echo "文件存在!路径为:$filepath" filetimestamp=`stat -c %Y $filepath` echo "文件最后修改时间戳:$filetimestamp" timecha=$[$timestamp

  • java Timer测试定时调用及固定时间执行代码示例

    本文实例主要进行java Timer(定时调用.固定时间执行)测试,具体实现代码如下. 测试1 当任务执行时间小于重复执行的间隔时间 代码: public class TimerTest2 { public static void main(String[] args) throws InterruptedException { Timer timer = new Timer(); timer.schedule(new MyTask(0), 1000, 10000); //timer.sched

  • pandas 两列时间相减换算为秒的方法

    如下所示: pd.to_datetime(data[data['last_O_XLMC']==data['O_XLMC']]['O_SJFCSJ'], format='%H:%M:%S')-pd.to_datetime(data['last_O_SJFCSJ'], format='%H:%M:%S')).dt.total_seconds() 以上这篇pandas 两列时间相减换算为秒的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • python3中datetime库,time库以及pandas中的时间函数区别与详解

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面的.通读文档可知,time 模块是围绕着 Unix Timestamp 进行的. 该模块主要包括一个类 struct_time,另外其他几个函数及相关常量. 需要注意的是在该模块中的大多数函数是调用了所在平台C library的同名函数, 所以

  • Pandas数据分析的一些常用小技巧

    Pandas小技巧 import pandas as pd pandas生成数据 d = {"sex": ["male", "female", "male", "female"], "color": ["red", "green", "blue", "yellow"], "age": [1

  • Pandas数据分析之批量拆分/合并Excel

    目录 前言 一.假造数据 二.程序演示 1.将一个大Excel等份拆成多个Excel 2.合并多个小Excel到一个大Excel 总结 前言 笔者最近正在学习Pandas数据分析,将自己的学习笔记做成一套系列文章.本节主要记录Pandas中数据的合并(concat和append) 将一个大的Excel等份拆成多个Excel将多个小Excel合并成一个大的Excel并且标记来源 一.假造数据 work_dir="./datas" splits_dir=f"{work_dir}/

随机推荐