Pandas的datetime数据类型(二)

简介: Pandas的datetime数据处理涉及日期运算和Timedelta计算,如计算疫情爆发天数,获取日期的季度和年份。示例中展示如何从Ebola数据集重建疫情爆发第一天,以及如何对银行关闭日期分组统计。此外,演示了如何按日期筛选数据,设置日期为DataFrame索引,并使用`date_range`创建日期序列。还讨论了如何处理不连续日期,以及如何进行时间范围查询,包括在特定时间段内选择数据和按时间间隔过滤。最后,展示了如何高效地在时间序列上选取数据。

Pandas的datetime数据类型(一)+https://developer.aliyun.com/article/1543824?spm=a2c6h.13148508.setting.19.1fa24f0esOqb0u


日期运算和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类型

相关文章
|
9天前
|
Python
Pandas的datetime数据类型(一)
Python中内置了`datetime`模块,用于处理日期和时间。可以使用`datetime.now()`获取当前时间,或通过`datetime(year, month, day)`创建指定日期。在Pandas中,`pd.to_datetime()`函数用于将数据转换为`Timestamp`或`DatetimeIndex`,如从CSV加载数据时转换日期列。此外,`pd.read_csv()`的`parse_dates`参数可以直接将指定列解析为日期类型。Pandas的`Timestamp`对象还允许提取年、月、日等部分。
Python之pandas:数据类型变换之object、category、bool、int32、int64、float64以及数据类型标准化之详细攻略
Python之pandas:数据类型变换之object、category、bool、int32、int64、float64以及数据类型标准化之详细攻略
Python之pandas:数据类型变换之object、category、bool、int32、int64、float64以及数据类型标准化之详细攻略
|
2月前
|
存储 传感器 监控
Pandas DateTime 超强总结
Pandas DateTime 超强总结
|
2月前
|
存储 NoSQL 数据挖掘
Pandas 数据类型概述与转换实战
Pandas 数据类型概述与转换实战
|
9月前
|
数据采集 SQL 数据挖掘
【100天精通Python】Day56:Python 数据分析_Pandas数据清洗和处理(删除填充插值,数据类型转换,去重,连接与合并)
【100天精通Python】Day56:Python 数据分析_Pandas数据清洗和处理(删除填充插值,数据类型转换,去重,连接与合并)
86 0
|
存储 传感器 监控
Pandas DateTime 超强总结
Pandas DateTime 超强总结
Pandas DateTime 超强总结
|
存储 NoSQL 数据挖掘
Pandas 数据类型概述与转换实战
Pandas 数据类型概述与转换实战
Pandas 数据类型概述与转换实战
|
数据挖掘 数据处理 数据格式
Pandas 数据处理 | Datetime 时间模块在 Pandas 中的使用
Datatime 作为 Python 中的时间模块类型,处理时间有关数据是非常方便的, Pandas 作为数据分析程序包同样也支持 DataTime 数据机制
Pandas 数据处理 | Datetime 时间模块在 Pandas 中的使用
|
Java Python
Pandas高级教程之:category数据类型
Pandas高级教程之:category数据类型
|
大数据 Python 容器
pandas100个骚操作:使用 Datetime 提速 50 倍运行速度!
本篇是pandas100个骚操作系列的第 10 篇:使用 Datetime 提速 50 倍运行速度!