Pandas中datetime数据类型的使用

 更新时间:2023年12月28日 16:20:55   作者:小森( ﹡ˆoˆ﹡ )  
本文主要介绍了Pandas中datetime数据类型的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Python内置了datetime对象,可以在datetime库中找到

from datetime import datetime
now = datetime.now()
now

还可以手动创建datetime

t2 = datetime(2023,4,21)
now-t2
#
datetime.timedelta(days=251, seconds=31427, microseconds=546921)

将pandas中的数据转换成datetime

1.to_datetime函数

Timestamp是pandas用来替换python datetime.datetime的 可以使用to_datetime函数把数据转换成Timestamp类型

import pandas as pd
ebola = pd.read_csv(r'C:\Users\Administrator\Documents\WeChat Files\wxid_mgaxcaeufcpq22\FileStorage\File\2023-12\country_timeseries.csv')
ebola.iloc[:5,:5]

从数据中看出 Date列是日期,但通过info查看加载后数据为object类型
某些场景下, (比如从csv文件中加载进来的数据), 日期时间的数据会被加载成object类型, 此时需要手动的把这个字段转换成日期时间类型可以通过to_datetime方法把Date列转换为Timestamp,然后创建新列

ebola['date_dt'] = pd.to_datetime(ebola['Date'])
ebola.info()

# 
18  date_dt              122 non-null    datetime64[ns]

2.通过Timestamp创建

d=pd.Timestamp(2023,12,28)
d

# Timestamp('2023-12-28 00:00:00')

3 .通过parse_dates参数指定 

ebola = pd.read_csv('data/country_timeseries.csv',parse_dates=[0])
ebola.info()
# Date列转换为datetime类型

提取日期的各个部分

d = pd.to_datetime('2023-04-20')

# 可以看到得到的数据是Timestamp类型,通过Timestamp可以获取年,月,日等部分
d.year
d.month
d.day

日期运算和Timedelta

Ebola数据集中的Day列表示一个国家爆发Ebola疫情的天数。这一列数据可以通过日期运算重建该列 疫情爆发的第一天(数据集中最早的一天)是2014-03-22。

计算疫情爆发的天数时,只需要用每个日期减去这个日期即可

获取疫情爆发的第一天 
ebola['Date'].min() 
添加新列 
ebola['outbreak_d'] = ebola['Date']-ebola['Date'].min()
查看数据 
ebola[['Date','Day','outbreak_d']].head() ebola[['Date','Day','outbreak_d']].tail()
banks['倒闭的季度'] = banks['Closing Date'].dt.quarter
banks['倒闭的年份'] = banks['Closing Date'].dt.year

.dt.quarter和.dt.year可以获取当前日期的季度和年份

# 类似于这个方法
d=pd.Timestamp(2023,12,30)
d.weekday()
closing_year = banks.groupby(['倒闭的年份'])['Bank Name'].count()
closing_year

# 
2000,2
2001,4
2002,11
2003,3
2004,4
2007,3
2008,25
2009,140
2010,157
2011,92

基于日期数获取数据子集

先将第一列数据处理为datetime类型

tesla = pd.read_csv(r'C:\Users\Administrator\Documents\WeChat Files\wxid_mgaxcaeufcpq22\FileStorage\File\2023-12\TSLA.csv',parse_dates=[0])
tesla.info()
tesla.loc[(tesla.Date.dt.year==2015) & (tesla.Date.dt.month == 8)]

将索引设为Date 列,然后可以查询2015年8月的所有数据

tesla.set_index('Date',inplace=True)
tesla['2015-08']    
tesla['ref_date'] = tesla['Date']-tesla['Date'].min()
tesla.set_index('ref_date',inplace=True)
tesla.loc['1000 days']

 日期范围

使用date_range函数来创建连续的日期范围

head_range = pd.date_range(start='2014-12-31',end='2015-01-05')
head_range  # 使用date_range函数创建日期序列时,可以传入一个参数freq,默认情况下freq取值为D,表示日期范围内的值是逐日递增的

# 
DatetimeIndex(['2014-12-31', '2015-01-01', '2015-01-02', '2015-01-03',
               '2015-01-04', '2015-01-05'],
              dtype='datetime64[ns]', freq='D')

包含日期的数据集中,并非每一个都包含固定频率。比如在Ebola数据集中,日期并没有规律 ebola.iloc[:,:5]

从上面的数据中可以看到,缺少2015年1月1日,2014年3月23日,如果想让日期连续,可以创建一个日期范围来为数据集重建索引。

在freq传入参数的基础上,可以做一些调整
# 隔一个工作日取一个工作日
pd.date_range('2023-01-01','2023-01-07',freq='2B')
freq传入的参数可以传入多个
#2023年每个月的第一个星期四
pd.date_range('2023-01-01','2023-12-31',freq='WOM-1THU')
#每个月的第三个星期五
pd.date_range('2023-01-01','2023-12-31',freq='WOM-3FRI')

 datetime类型案例

加载数据
crime = pd.read_csv('data/crime.csv',parse_dates=['REPORTED_DATE'])
查看数据
crime.info()
设置报警时间为索引
crime = crime.set_index('REPORTED_DATE')
crime.head()
crime.loc['2016-05-12']
查看某一段时间的犯罪记录
crime.loc['2015-3-4':'2016-1-1'].sort_index()
时间段可以包括小时分钟
crime.loc['2015-3-4 22':'2016-1-1 23:45:00'].sort_index()查询凌晨两点到五点的报警记录
crime.between_time('2:00', '5:00', include_end=False)
查看发生在某个时刻的犯罪记录
crime.at_time('5:47')
在按时间段选取数据时,可以将时间索引排序,排序之后再选取效率更高
crime_sort = crime.sort_index()
%timeit crime.loc['2015-3-4':'2016-1-1']
%timeit crime_sort.loc['2015-3-4':'2016-1-1']

(%timeit是ipython的魔术函数,可用于计时特定代码段)

总结:

Pandas中,datetime64用来表示时间序列类型

时间序列类型的数据可以作为行索引,对应的数据类型是DatetimeIndex类型

datetime64类型可以做差,返回的是Timedelta类型

到此这篇关于Pandas中datetime数据类型的使用的文章就介绍到这了,更多相关Pandas datetime数据类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pandas将多个dataframe以多个sheet的形式保存到一个excel文件中

    pandas将多个dataframe以多个sheet的形式保存到一个excel文件中

    这篇文章主要介绍了pandas将多个dataframe以多个sheet的形式保存到一个excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • python消除序列的重复值并保持顺序不变的实例

    python消除序列的重复值并保持顺序不变的实例

    今天小编就为大家分享一篇python消除序列的重复值并保持顺序不变的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 详解Python魔法方法之描述符类

    详解Python魔法方法之描述符类

    今天带大家复习一下python描述符类的相关知识,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • Python新手入门最容易犯的错误总结

    Python新手入门最容易犯的错误总结

    这篇文章主要总结了一些关于Python新手入门最容易犯的错误,希望通过学习本文总结的十二点易犯错误点,能够给新手们带来一定的帮助,需要的朋友可以参考学习,下面来一起看看吧。
    2017-04-04
  • Python实例方法、类方法、静态方法的区别与作用详解

    Python实例方法、类方法、静态方法的区别与作用详解

    这篇文章主要介绍了Python实例方法、类方法、静态方法的区别与作用,结合实例形式分析了Python面向对象程序设计中实例方法、类方法、静态方法的概念、原理、用法及相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • python中bisect模块用法实例

    python中bisect模块用法实例

    这篇文章主要介绍了python中bisect模块用法实例,以实例形式介绍了bisect模块中几种常见函数的用法,非常具有实用价值,需要的朋友可以参考下
    2014-09-09
  • Keras预训练的ImageNet模型实现分类操作

    Keras预训练的ImageNet模型实现分类操作

    这篇文章主要介绍了Keras预训练的ImageNet模型实现分类操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python的pytest测试框架中fixture的使用详解

    Python的pytest测试框架中fixture的使用详解

    这篇文章主要介绍了pytest中fixture的使用详解,pytest是一个非常成熟的全功能的Python测试框架,能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试,需要的朋友可以参考下
    2023-07-07
  • PyTorch的自适应池化Adaptive Pooling实例

    PyTorch的自适应池化Adaptive Pooling实例

    今天小编就为大家分享一篇PyTorch的自适应池化Adaptive Pooling实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 详解使用 pyenv 管理多个版本 python 环境

    详解使用 pyenv 管理多个版本 python 环境

    本篇文章主要介绍了详解使用 pyenv 管理多个版本 python 环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10

最新评论