Python日期数据处理方法
2020-01-01 本文已影响0人
默直
python分析之日期数据处理方法,如下是数据类型及其描述,帮助我们学习。
类型 | 描述 |
---|---|
%Y | 四位的年份 |
%y | 两位的年份 |
%m | 两位的月份 |
%d | 两位的日期号 |
%H | 小时,24小时制00-23 |
%I | 小时,12小时制01-12 |
%M | 两位的分钟00-59 |
%S | 秒00-61,其中60,61是闰秒 |
%w | 星期日期0-6,其中0表示星期日 |
%U | 一年中的星期数00-53。以星期天为每周第一天,一年中第一个星期天前的日期作为第“0”周 |
%W | 一年中的星期数00-53。以星期一为每周第一天,一年中第一个星期一前的日期作为第“0”周 |
%z | 格式为+HHMM或者-HHMM的UTC时区偏移;如果没有时区则为空。 |
%F | %Y-%m-%d的简写 |
%D | %m/%d/%y的简写 |
#导入相关库
import pandas as pd
import numpy as np
import time
import datetime
import matplotlib.pyplot as plt
# 解决坐标轴刻度负号乱码
plt.rcParams['axes.unicode_minus'] = False
# 解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['Simhei']
1 时间戳Timestamp对象的生成
1.1 pd.Timestamp
pd.Timestamp("2019-12-12")
-->Timestamp('2019-12-12 00:00:00')
pd.Timestamp("2019/12/12")
--->Timestamp('2019-12-12 00:00:00')
pd.Timestamp(2019,12,12)
--->Timestamp('2019-12-12 00:00:00')
pd.Timestamp(year=2019, month=12, day=12, hour=0,minute=0,second=0)
--->Timestamp('2019-12-12 00:00:00')
图片.png
1.2 pd.to_datetime
pd.to_datetime("2019/12/12",format="%Y/%m/%d")
--->Timestamp('2019-12-12 00:00:00')
pd.to_datetime("2019--12--12",format="%Y--%m--%d")
--->Timestamp('2019-12-12 00:00:00')
pd.to_datetime("2019-*12-*12",format="%Y-*%m-*%d")
--->Timestamp('2019-12-12 00:00:00')
图片.png
a=pd.Series(["2019-*12-*12","2019-*12-*12","2019-*12-*12"])
pd.to_datetime(a,format="%Y-*%m-*%d")
type(pd.to_datetime(a,format="%Y-*%m-*%d"))
--->pandas.core.series.Series
图片.png
1.3 pd.date_range
生成2018年12月21日到现在所有日期,按天来技术。
第一种方法:生成指定日期数量,比如生成365天,从'2019-12-21'开始。
#生成2019年12月21日到现在所有日期,按天来
#第一种方法
#freq,频率,按天(D)来生成
#periods,长度,365个
pd.date_range('2019-12-21',freq='D',periods=365)
图片.png
#freq,频率,按月(m)来生成
#periods,长度,365个
pd.date_range('2019-12-21',freq='m',periods=365)
图片.png
第二种方法:pd.date_range(起始日期,结束日期)
#生成指定某个日期范围内的日期,从2019-12-01到2019-12-21
pd.date_range('2019-12-01','2019-12-21')
图片.png
2 日期数据转化
示例数据:
图片.png
2.1 转化为指定格式 .dt.strftime()
我们发现
data.日期
----------------------------------------------------
0 2017-09-14
1 2017-09-13
...
6541 1990-12-19
Name: 日期, Length: 6542, dtype: datetime64[ns]
转化为%Y/%m/%d格式
data.日期.dt.strftime("%Y/%m/%d")
----------------------------------------------------
0 2017/09/14
1 2017/09/13
2 2017/09/12
.....
6540 1990/12/20
6541 1990/12/19
Name: 日期, Length: 6542, dtype: object
转化为年月格式
data.日期.dt.strftime("%Y-%d")
----------------------------------------------------
0 2017-09
1 2017-09
2 2017-09
...
6540 1990-12
6541 1990-12
Name: 日期, Length: 6542, dtype: object
另采用.dt.year,这种调用,年份调出来是一个int类型
data.日期.dt.year #把年调出来是一个int类型
----------------------------------------------------
0 2017
1 2017
2 2017
...
6540 1990
6541 1990
Name: 日期, Length: 6542, dtype: int64
data.日期.dt.month #把月调出来是一个int类型
----------------------------------------------------
0 9
1 9
2 9
..
6540 12
6541 12
Name: 日期, Length: 6542, dtype: int64
data.日期.dt.day #把日调出来是一个int类型
----------------------------------------------------
0 14
1 13
2 12
3 11
..
6540 20
6541 19
Name: 日期, Length: 6542, dtype: int64
data.日期.dt.date #把日期调出来,是一个object类型
----------------------------------------------------
0 2017-09-14
1 2017-09-13
2 2017-09-12
3 2017-09-11
...
6540 1990-12-20
6541 1990-12-19
Name: 日期, Length: 6542, dtype: object
data.日期.dt.time #把时间调出来,是一个object类型
----------------------------------------------------
0 00:00:00
1 00:00:00
2 00:00:00
...
6540 00:00:00
6541 00:00:00
Name: 日期, Length: 6542, dtype: object
注意,上面提取的Series,都是object类型,要转化为datatime类型,还是需要用to_datetime方法。
3 日期索引对象DatetimeIndex
DatetimeIndex 的主要作用是之一是用作 Pandas 对象的索引,使用它作为索引除了拥有普通索引对象的所有基本功能外,还拥有简化频率处理的高级时间序列方法。
图片.png
通过图例,不能看出,index并不是日期,那么想要将日期设置为index,怎么办呢,很简单,使用如下命令即可:
data.index=data.日期
图片.png
3.1 索引和切片
设置日期为索引,那么就能够像索引一样随意的折腾了(具有索引的一般特性)
图片.png3.2 重采样resample对象
esample 表示根据日期维度进行数据聚合,可以按照分钟、小时、工作日、周、月、年等来作为日期维度,更多的日期维度见 Offset Aliases( http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases )。
图片.png图片.png
图片.png 图片.png