好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Data Science | Pandas基础(三)-Timestamp

前文导读

Data Science | Pandas基础(一)

Data Science | Pandas基础(二)

时间模块datetime

在学习时间序列之前我们需要先了解一下datetime模块的基本使用,datetime模块不是pandas库中所包含的。

但为了能更好的学习pandas中的时间序列,我们可以先学习datetime的基本使用以打好基础,datetime我们主要掌握一下几种方法: datetime.date(), datetime.datetime(), datetime.timedelta()

datetime.date

我们可以使用 datetime.date.today 方法返回当前时间,其数据类型为 datetime.date

 import datetime   today = datetime.date.today() print(today,type(today)) >>> 2018-10-28 <class 'datetime.date'>  

同时我们可以使用 datetime.date(年,月,日) 的方式输出我们想要的日期的datetime类型。

 import datetime t = datetime.date(2016,6,1) print(t) # (年,月,日) → 直接得到当时日期 >>> 2016-06-01  
datetime.datetime

我们使用 datetime.datetime.now 方法返回当前时间,其数据类型为 datetime.datetime

 import datetime now = datetime.datetime.now() print(now,type(now)) >>> 2018-10-28 17:34:07.467642 <class 'datetime.datetime'>  

同样的我们可以使用 datetime.datetime(年,月,日,时,分,秒) 的形式输出我们想要的 datetime.datetime 类型的数据。

 t1 = datetime.datetime(2016,6,1) t2 = datetime.datetime(2014,1,1,12,44,33) print(t1,t2) >>> 2016-06-01 0 2014-01-01 12:44:33  
datetime.timedelta

datetime.timedelta 代表的数据是时间差数据类型。时间差主要用作时间的加减法,相当于可被识别的时间“差值”

 # datetime.timedelta:时间差  today = datetime.datetime.today()  # datetime.datetime也有today()方法 yestoday = today - datetime.timedelta(1)  # print(today) print(yestoday) print(today - datetime.timedelta(7)) >>> 2018-11-04 14:48:28.967149 2018-11-03 14:48:28.967149 2018-10-28 14:48:28.967149  
日期解析方法:parser.parse

除了上面转换方法之外,我们还需要其他关于字符串解析为时间格式的方法。

可以使用parse方法将字符串转换为 datetime.datetime 类型的数据。

 from dateutil.parser import parse date = '12-21-2017' t = parse(date) print(t,type(t)) >>> 2017-12-21 0 <class 'datetime.datetime'>  

同样的我们还可以将其他格式的字符串转化为 datetime.datetime ,但无法解析中文

 print(parse('2000-1-1'),'\n',      parse('5/1/2014'),'\n',      parse('5/1/2014', dayfirst = True),'\n',        # 国际通用格式中,日在月之前,可以通过dayfirst来设置      parse('22/1/2014'),'\n',      parse('Jan 31, 1997 10:45 PM')) >>> 2000-01-01 0  2014-05-01 0  2014-01-05 0  2014-01-22 0  1997-01-31 22:45:00  
Pandas时刻数据:Timestamp

时刻数据代表时间点,是pandas的数据类型

是将值与时间点相关联的最基本类型的时间序列数据。

Timestamp和上面的datetime基本没有区别,仅仅区别于一个是pandas模块,一个是datetime模块。

pandas.Timestape

pandas.Timestape可以直接生成pandas的时刻数据

 import numpy as np import pandas as pd date1 = datetime.datetime(2016,12,1,12,45,30)  # 创建一个datetime.datetime date2 = '2017-12-21'  # 创建一个字符串 t1 = pd.Timestamp(date1) t2 = pd.Timestamp(date2) print(t1,type(t1)) print(t2,type(t2)) >>> 2016-12-01 12:45:30 <class 'pandas._libs.tslibs.timestamps.Timestamp'> 2017-12-21 0 <class 'pandas._libs.tslibs.timestamps.Timestamp'>  
pandas.to_datetime

pandas.to_datetime可以将如果是单个的时间数据,转换成pandas的时刻数据,数据类型为Timestamp,如果是多个的时间数据,将会转换为pandas的DatetimeIndex。

单个时间数据实例:

 from datetime import datetime  date1 = datetime(2016,12,1,12,45,30) date2 = '2017-12-21' t1 = pd.to_datetime(date1) t2 = pd.to_datetime(date2) print(t1,type(t1)) print(t2,type(t2)) >>> 2016-12-01 12:45:30 <class 'pandas._libs.tslibs.timestamps.Timestamp'> 2017-12-21 0 <class 'pandas._libs.tslibs.timestamps.Timestamp'>  

多个时间数据实例:

 lst_date = [ '2017-12-21', '2017-12-22', '2017-12-23'] t3 = pd.to_datetime(lst_date) print(t3,type(t3)) >>> DatetimeIndex(['2017-12-21', '2017-12-22', '2017-12-23'], dtype='datetime64[ns]', freq=None) <class 'pandas.core.indexes.datetimes.DatetimeIndex'>  

当多个时间序列中有其他的数据格式时,我们可以使用error参数返回, errors = 'ignore' :不可解析时返回原始输入,这里就是直接生成一般数组

 date3 = ['2017-2-1','2017-2-2','2017-2-3','hello world!','2017-2-5','2017-2-6'] t3 = pd.to_datetime(date3, errors = 'ignore') print(t3,type(t3)) >>> ['2017-2-1' '2017-2-2' '2017-2-3' 'hello world!' '2017-2-5' '2017-2-6'] <class 'numpy.ndarray'>  

当 errors = 'coerce' 时,不同数据类型的数据将会返回NaT,结果认为DatetimeIndex

 date3 = ['2017-2-1','2017-2-2','2017-2-3','hello world!','2017-2-5','2017-2-6'] t4 = pd.to_datetime(date3, errors = 'coerce') print(t4,type(t4)) >>> DatetimeIndex(['2017-02-01', '2017-02-02', '2017-02-03', 'NaT', '2017-02-05',                '2017-02-06'],               dtype='datetime64[ns]', freq=None) <class 'pandas.core.indexes.datetimes.DatetimeIndex'>  
巩固习题

请调用datetime模块,输出以下时间信息:

创建时间变量‘2000年5月1日’,求出1000天之后是哪年哪月哪日?

请通过迭代创建一个时间列表(如图,时间区间为任意一个月,这里可以用for语句),然后转化成DatetimeIndex,并print月中是多少号

请如图创建一个包含时间日期的txt文件,通过open语句读取后转化成DatetimeIndex

回复 「作业」 获取答案

咸鱼普拉思

一只咸鱼在编程路上的摸爬滚打,记录摸索中的点点滴滴。

查看更多关于Data Science | Pandas基础(三)-Timestamp的详细内容...

  阅读:31次