Pandas-05(日期功能、时间增量)

pandas 包含广泛的功能和特性,可用于处理所有领域的时间序列数据。

pandas 捕获了 4 个与时间相关的一般概念:

  1. 日期时间:具有时区支持的特定日期和时间。类似于datetime.datetime标准库。

  2. 时间增量:绝对持续时间。类似于datetime.timedelta标准库。

  3. 时间跨度:由时间点及其相关频率定义的时间跨度。

  4. 日期偏移量:尊重日历算术的相对持续时间。dateutil.relativedelta.relativedeltadateutil包装类似。

Concept

Scalar Class

Array Class

pandas Data Type

Primary Creation Method

Date times

Timestamp

DatetimeIndex

datetime64[ns] or datetime64[ns, tz]

to_datetime or date_range

Time deltas

Timedelta

TimedeltaIndex

timedelta64[ns]

to_timedelta or timedelta_range

Time spans

Period

PeriodIndex

period[freq]

Period or period_range

Date offsets

DateOffset

None

None

DateOffset

Series和DataFrame具有扩展的数据类型支持和功能datetimetimedelta 以及Period传递到这些构造函数时的数据。 然而DateOffset,数据将作为object数据存储。

目录

目录

1.日期功能(Datetime)

1.1 .to_datetime()从各种来源和格式解析时间序列信息

1.2 .date_range()生成固定频率日期和时间跨度的序列

1.3 .dt访问器

2.时间增量(Timedelta)

2.1 设置基础时间差

2.2 时间差计算



1.日期功能(Datetime)

1.1 .to_datetime()从各种来源和格式解析时间序列信息

基本语法:

pd.to_datetime([datetim1,datetime2....])

 示例:将文本日期、numpy日期和自带的datetime日期转化为pandas日期类型

#创建日期
import pandas as pd
import numpy as np
import datetime


dateList = pd.to_datetime(
    ["1/1/2018", np.datetime64("2018-01-01"), datetime.datetime(2018, 1, 1)]
)
dateList


#输出结果:
DatetimeIndex(['2018-01-01', '2018-01-01', '2018-01-01'], dtype='datetime64[ns]', freq=None)

1.2 .date_range()生成固定频率日期和时间跨度的序列

基本语法:

pd.date_range('xxxx-xx-xx',periods=x,freq="x")

其中第一项参数为开始时期,格式为xxxx-xx-xx(年-月-日)

第二项参数periods=x,x为整数类型,表示跨度,例如periods=5;

第三项参数freq=“x”,x为频率,可选数值有 :

#B 工作日
#D 自然日
#W 每周
#M 每月
#S 秒频率
#ms 毫秒频率
#A 年度频率

示例:

#创建日期
import pandas as pd

dateList = pd.date_range('2020-01-01',periods=5)
#输出结果:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
               '2020-01-05'],
              dtype='datetime64[ns]', freq='D')


#freq='D' #频率是天,M频率是月
dateList = pd.date_range('2020-01-01',periods=5,freq="M")
#输出结果:
DatetimeIndex(['2020-01-31', '2020-02-29', '2020-03-31', '2020-04-30',
               '2020-05-31'],
              dtype='datetime64[ns]', freq='M')



#business工作日,freq="B",获取工作日的时间
dateList = pd.bdate_range('2020-01-01',periods=10,freq='B')
#输出结果:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-06',
               '2020-01-07', '2020-01-08', '2020-01-09', '2020-01-10',
               '2020-01-13', '2020-01-14'],
              dtype='datetime64[ns]', freq='B')

1.3 .dt访问器

Series 提供一个可以简单、快捷地返回 datetime 属性值的访问器。这个访问器返回的也是 Series,索引与现有的 Series 一样。

示例:

s = pd.Series(pd.date_range('20220101 09:10:12', periods=4))

#输出结果
0   2022-01-01 09:10:12
1   2022-01-02 09:10:12
2   2022-01-03 09:10:12
3   2022-01-04 09:10:12


s.dt.hour
#输出结果
0    9
1    9
2    9
3    9
dtype: int64

s.dt.second
#输出结果
0    12
1    12
2    12
3    12
dtype: int64

s.dt.day
#输出结果
0    1
1    2
2    3
3    4
dtype: int64

 用下列表达式进行筛选非常方便:

s[s.dt.day == 2]
#输出结果
1   2022-01-02 09:10:12
dtype: datetime64[ns]

 还可以用 Series.dt.strftime()把 datetime 的值当成字符串进行格式化,支持与标准strftime()同样的格式。

s = pd.Series(pd.date_range('20220101', periods=4))

#输出结果
0   2022-01-01
1   2022-01-02
2   2022-01-03
3   2022-01-04
dtype: datetime64[ns]



#转换为字符串格式
s.dt.strftime('%Y/%m/%d')

#输出结果
0    2022/01/01
1    2022/01/02
2    2022/01/03
3    2022/01/04
dtype: object

2.时间增量(Timedelta)

时间增量是时间上的差异,以差异单位表示,例如天、小时、分钟、秒。它们既可以是正向的,也可以是逆向的。

Timedeltadatetime.timedelta 的子类,行为方式类似,但允许与np.timedelta64类型以及大量自定义表示、解析和属性兼容。

2.1 设置基础时间差

#设置时间差
timediff = pd.Timedelta('2 days 2 hours 15 minutes 30seconds')
timediff

#输出结果
Timedelta('2 days 02:15:30')


#通过整数设置时间差
timediff = pd.Timedelta(6,unit='h')
timediff
#输出结果
Timedelta('0 days 06:00:00')



timediff = pd.Timedelta(days=2)
timediff
#输出结果
Timedelta('2 days 00:00:00')

2.2 时间差计算

示例:

s = pd.Series(pd.date_range('2020-1-1',periods=3,freq="D"))
#输出结果
0   2020-01-01
1   2020-01-02
2   2020-01-03
dtype: datetime64[ns]


td = pd.Series([pd.Timedelta(days=i) for i in range(3)])
#输出结果
0   0 days
1   1 days
2   2 days
dtype: timedelta64[ns]



#时间相加
s+td
#输出结果
0   2020-01-01
1   2020-01-03
2   2020-01-05
dtype: datetime64[ns]


#时间相减
s-td
#输出结果
0   2020-01-01
1   2020-01-01
2   2020-01-01
dtype: datetime64[ns]



#复合运算
s-2*td

#输出结果
0   2020-01-01
1   2019-12-31
2   2019-12-30
dtype: datetime64[ns]

你可能感兴趣的:(pandas,pandas,数据分析,数据挖掘)