Pandas基础(三)

时间模块datetime

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

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

datetime.date

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

1
2
3
4
5
import datetime  
today = datetime.date.today()
print(today,type(today))
>>>
2018-10-28 <class 'datetime.date'>

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

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

datetime.datetime

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

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

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

1
2
3
4
5
t1 = datetime.datetime(2016,6,1)
t2 = datetime.datetime(2014,1,1,12,44,33)
print(t1,t2)
>>>
2016-06-01 00:00:00 2014-01-01 12:44:33

datetime.timedelta

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

1
2
3
4
5
6
7
8
9
10
11
# 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类型的数据。

1
2
3
4
5
6
from dateutil.parser import parse
date = '12-21-2017'
t = parse(date)
print(t,type(t))
>>>
2017-12-21 00:00:00 <class 'datetime.datetime'>

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

1
2
3
4
5
6
7
8
9
10
11
12
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 00:00:00
2014-05-01 00:00:00
2014-01-05 00:00:00
2014-01-22 00:00:00
1997-01-31 22:45:00

Pandas时刻数据:Timestamp

  • 时刻数据代表时间点,是pandas的数据类型
  • 是将值与时间点相关联的最基本类型的时间序列数据。

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

pandas.Timestape

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

1
2
3
4
5
6
7
8
9
10
11
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 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'>

pandas.to_datetime

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

单个时间数据实例:

1
2
3
4
5
6
7
8
9
10
11
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 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'>

多个时间数据实例:

1
2
3
4
5
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':不可解析时返回原始输入,这里就是直接生成一般数组

1
2
3
4
5
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

1
2
3
4
5
6
7
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'>

煌金 wechat
扫描关注公众号,回复「1024」获取为你准备的特别推送~
  • 本文作者: 煌金 | 微信公众号【咸鱼学Python】
  • 本文链接: http://www.xianyucoder.cn/2019/01/20/pandas3/
  • 版权声明: 本博客所有文章除特别声明外,均采用 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!