Pandas中如何进行时间序列数据的基础操作:转换、索引与切片?

2026-05-29 01:221阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1181个文字,预计阅读时间需要5分钟。

Pandas中如何进行时间序列数据的基础操作:转换、索引与切片?

时间序列的类型:- 时间点:具体的时间点,如2017年1月或整个2010年- 时间区间:由开始时间和结束时间表示,如从2010年1月到2017年1月,表示为特定的时间段,时间区间可以被视为特殊情况

时间序列的类型:

时间戳:具体的时刻

固定的时间区间:例如2007年的1月或整个2010年

时间间隔:由开始时间和结束时间表示,时间区间可以被认为是间隔的特殊情况

Pandas中如何进行时间序列数据的基础操作:转换、索引与切片?

实验时间和消耗时间:每个时间是相对于特定开始时间的时间的量度,(例如自从被放置在烤箱中每秒烘烤的饼干的直径)

日期和时间数据的类型及工具

datetime模块中的类型:

date 使用公历日历存储日历日期(年,月,日) time 将时间存储为小时,分钟,秒,微秒 datetime 存储日期和时间 timedelta 表示两个datetime值之间的差(如日,秒,微秒) tzinfo 用于存储时区信息的基本类型 from datetime import datetime now = datetime.now() now.year #当时年份 now.month #当前月份 now.day #当前天 now.time() #当前时间 datetime.time(12, 27, 41, 303676) 两个时间戳运算得到一个timedelta(时间差)类型

日期时间差 timedelta类型

from datetime import timedelta start = datetime(2019,2,5) start + timedelta(20) #默认为天 datetime.datetime(2019, 2, 25, 0, 0)

字符串和datetime互相转换

date.strptime方法将字符串转换为时间

values = '2019-8-9' datetime.strptime(values,'%Y-%m-%d') #是在已知格式的前提下转换日期的好方式 datetime.datetime(2019, 8, 9, 0, 0) datestrs = ['2019-8-7','2019-8-9'] [datetime.strptime(values,'%Y-%m-%d') for values in datestrs] [datetime.datetime(2019, 8, 7, 0, 0), datetime.datetime(2019, 8, 9, 0, 0)]

更为通用的日期转换格式

from dateutil.parser import parse parse(values) datetime.datetime(2019, 8, 9, 0, 0) parse('8,5,2018',dayfirst=True) #dayfirst参数 第一个元素是天 datetime.datetime(2018, 5, 8, 0, 0)

pd.to_datetime() 用于轴索引或DataFrame的列

pd.to_datetime(datestrs)
DatetimeIndex(['2019-08-07', '2019-08-09'], dtype='datetime64[ns]', freq=None)

更为简单的转换

datetime(2019,1,1)
datetime.datetime(2019, 1, 1, 0, 0)

时间序列的算术运算(在日期上自动对齐)

index = pd.date_range('3/3/2018',periods=20) ts = pd.Series(np.random.randn(20),index=index) ts 2018-03-03 0.611591 2018-03-04 0.119168 2018-03-05 0.514390 2018-03-06 1.010600 2018-03-07 0.181763 2018-03-08 -0.290964 2018-03-09 0.252927 2018-03-10 -1.645692 2018-03-11 -0.500014 2018-03-12 -1.247355​ ts1 = ts[::2] 2018-03-03 0.611591 2018-03-05 0.514390 2018-03-07 0.181763 2018-03-09 0.252927 2018-03-11 -0.500014 2018-03-13 -0.122307 2018-03-15 0.361237 2018-03-17 -1.894853 2018-03-19 -1.608989 2018-03-21 1.274982 Freq: 2D, dtype: float64 ts + ts1 2018-03-03 1.223183 2018-03-04 NaN 2018-03-05 1.028781 2018-03-06 NaN 2018-03-07 0.363526 2018-03-08 NaN 2018-03-09 0.505853 2018-03-10 NaN 2018-03-11 -1.000028 2018-03-12 NaN 2018-03-13 -0.244613 2018-03-14 NaN 2018-03-15 0.722473 2018-03-16 NaN 2018-03-17 -3.789707 2018-03-18 NaN 2018-03-19 -3.217979 2018-03-20 NaN 2018-03-21 2.549963 2018-03-22 NaN ts.index.dtype #数据;类型在纳秒级的分辨率下存储时间戳 dtype('<M8[ns]') ts.index[0] #datetimeindex中的标量值是一个时间戳(timestamp) Timestamp('2018-03-03 00:00:00', freq='D')

时间序列的索引,选择,子集

时间序列的索引

ts = pd.Series(np.random.randn(1000),index = pd.date_range('1/1/2016',periods=1000)) s['2018-6'] #时间序列的索引 也可用ts.loc[] 2018-06-01 1.371843 2018-06-02 -0.356041 2018-06-03 0.111452 2018-06-04 0.325222 2018-06-05 -0.863138 2018-06-06 -0.115909 2018-06-07 0.062894 2018-06-08 0.223712

时间序列的切片

ts['2018-9-23':] #时间序列的切片 2018-09-23 0.005519 2018-09-24 -1.374038 2018-09-25 1.769112 2018-09-26 -0.000306 Freq: D, dtype: float64 ts.truncate(before='2018-9-24') #使用truncate方法向后切片 2018-09-24 -1.374038 2018-09-25 1.769112 2018-09-26 -0.000306 Freq: D, dtype: float64 ts.truncate(after='2016-1-4') #向前切片 2016-01-01 -1.776334 2016-01-02 -0.488550 2016-01-03 -1.299889 2016-01-04 -1.883413 Freq: D, dtype: float64

含有重复索引的时间序列的分组处理

index = pd.DatetimeIndex(['1/1/2017','1/1/2017','1/2/2017','1/3/2017']) dup_ta = pd.Series(np.arange(4),index=index) dup_ta 2017-01-01 0 2017-01-01 1 2017-01-02 2 2017-01-03 3 dtype: int32 dup_ta.groupby(level=0).mean()

以上这篇Pandas时间序列基础详解(转换,索引,切片)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。

本文共计1181个文字,预计阅读时间需要5分钟。

Pandas中如何进行时间序列数据的基础操作:转换、索引与切片?

时间序列的类型:- 时间点:具体的时间点,如2017年1月或整个2010年- 时间区间:由开始时间和结束时间表示,如从2010年1月到2017年1月,表示为特定的时间段,时间区间可以被视为特殊情况

时间序列的类型:

时间戳:具体的时刻

固定的时间区间:例如2007年的1月或整个2010年

时间间隔:由开始时间和结束时间表示,时间区间可以被认为是间隔的特殊情况

Pandas中如何进行时间序列数据的基础操作:转换、索引与切片?

实验时间和消耗时间:每个时间是相对于特定开始时间的时间的量度,(例如自从被放置在烤箱中每秒烘烤的饼干的直径)

日期和时间数据的类型及工具

datetime模块中的类型:

date 使用公历日历存储日历日期(年,月,日) time 将时间存储为小时,分钟,秒,微秒 datetime 存储日期和时间 timedelta 表示两个datetime值之间的差(如日,秒,微秒) tzinfo 用于存储时区信息的基本类型 from datetime import datetime now = datetime.now() now.year #当时年份 now.month #当前月份 now.day #当前天 now.time() #当前时间 datetime.time(12, 27, 41, 303676) 两个时间戳运算得到一个timedelta(时间差)类型

日期时间差 timedelta类型

from datetime import timedelta start = datetime(2019,2,5) start + timedelta(20) #默认为天 datetime.datetime(2019, 2, 25, 0, 0)

字符串和datetime互相转换

date.strptime方法将字符串转换为时间

values = '2019-8-9' datetime.strptime(values,'%Y-%m-%d') #是在已知格式的前提下转换日期的好方式 datetime.datetime(2019, 8, 9, 0, 0) datestrs = ['2019-8-7','2019-8-9'] [datetime.strptime(values,'%Y-%m-%d') for values in datestrs] [datetime.datetime(2019, 8, 7, 0, 0), datetime.datetime(2019, 8, 9, 0, 0)]

更为通用的日期转换格式

from dateutil.parser import parse parse(values) datetime.datetime(2019, 8, 9, 0, 0) parse('8,5,2018',dayfirst=True) #dayfirst参数 第一个元素是天 datetime.datetime(2018, 5, 8, 0, 0)

pd.to_datetime() 用于轴索引或DataFrame的列

pd.to_datetime(datestrs)
DatetimeIndex(['2019-08-07', '2019-08-09'], dtype='datetime64[ns]', freq=None)

更为简单的转换

datetime(2019,1,1)
datetime.datetime(2019, 1, 1, 0, 0)

时间序列的算术运算(在日期上自动对齐)

index = pd.date_range('3/3/2018',periods=20) ts = pd.Series(np.random.randn(20),index=index) ts 2018-03-03 0.611591 2018-03-04 0.119168 2018-03-05 0.514390 2018-03-06 1.010600 2018-03-07 0.181763 2018-03-08 -0.290964 2018-03-09 0.252927 2018-03-10 -1.645692 2018-03-11 -0.500014 2018-03-12 -1.247355​ ts1 = ts[::2] 2018-03-03 0.611591 2018-03-05 0.514390 2018-03-07 0.181763 2018-03-09 0.252927 2018-03-11 -0.500014 2018-03-13 -0.122307 2018-03-15 0.361237 2018-03-17 -1.894853 2018-03-19 -1.608989 2018-03-21 1.274982 Freq: 2D, dtype: float64 ts + ts1 2018-03-03 1.223183 2018-03-04 NaN 2018-03-05 1.028781 2018-03-06 NaN 2018-03-07 0.363526 2018-03-08 NaN 2018-03-09 0.505853 2018-03-10 NaN 2018-03-11 -1.000028 2018-03-12 NaN 2018-03-13 -0.244613 2018-03-14 NaN 2018-03-15 0.722473 2018-03-16 NaN 2018-03-17 -3.789707 2018-03-18 NaN 2018-03-19 -3.217979 2018-03-20 NaN 2018-03-21 2.549963 2018-03-22 NaN ts.index.dtype #数据;类型在纳秒级的分辨率下存储时间戳 dtype('<M8[ns]') ts.index[0] #datetimeindex中的标量值是一个时间戳(timestamp) Timestamp('2018-03-03 00:00:00', freq='D')

时间序列的索引,选择,子集

时间序列的索引

ts = pd.Series(np.random.randn(1000),index = pd.date_range('1/1/2016',periods=1000)) s['2018-6'] #时间序列的索引 也可用ts.loc[] 2018-06-01 1.371843 2018-06-02 -0.356041 2018-06-03 0.111452 2018-06-04 0.325222 2018-06-05 -0.863138 2018-06-06 -0.115909 2018-06-07 0.062894 2018-06-08 0.223712

时间序列的切片

ts['2018-9-23':] #时间序列的切片 2018-09-23 0.005519 2018-09-24 -1.374038 2018-09-25 1.769112 2018-09-26 -0.000306 Freq: D, dtype: float64 ts.truncate(before='2018-9-24') #使用truncate方法向后切片 2018-09-24 -1.374038 2018-09-25 1.769112 2018-09-26 -0.000306 Freq: D, dtype: float64 ts.truncate(after='2016-1-4') #向前切片 2016-01-01 -1.776334 2016-01-02 -0.488550 2016-01-03 -1.299889 2016-01-04 -1.883413 Freq: D, dtype: float64

含有重复索引的时间序列的分组处理

index = pd.DatetimeIndex(['1/1/2017','1/1/2017','1/2/2017','1/3/2017']) dup_ta = pd.Series(np.arange(4),index=index) dup_ta 2017-01-01 0 2017-01-01 1 2017-01-02 2 2017-01-03 3 dtype: int32 dup_ta.groupby(level=0).mean()

以上这篇Pandas时间序列基础详解(转换,索引,切片)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。