​时间序列&日期学习笔记大全(上)

湛林 凹凸数据

作者:湛林
来源:凹凸数据

建议收藏

1. 日期解析

# pd.to_datetime 可以解析多种格式的日期形式pd.to_datetime(['1/1/2018', np.datetime64('2018-01-01'),                datetime.datetime(2018, 1, 1)])# 生成固定频率的日期pd.date_range('2018-01-01', periods=3, freq='H')

2. 时区设置

# 设置时间的时区dti = dti.tz_localize('UTC')# 调整时间的时区dti.tz_convert('US/Pacific')

3. 用增量进行时间计算

a = pd.Timestamp('2018-01-05')# 输出a 是周几a.day_name()# 加一天b = a + pd.Timedelta('1 day')b.day_name()# 加一个工作日c = a + pd.offsets.BDay()c.day_name()

4. pandas的日期支持

pandas中一共有四种日期类型,分别是

  • Date times:一种特定的日期、时间,可以含时区特征
  • Time deltas:一种绝对时间增量
  • Time spans:时间跨度
  • Date offsets:与日历运算相关的相对时间持续时间(会被已object形式存储)
    对于时间序列数据,传统的做法是在一个序列或DataFrame的索引中表示时间成分,这样就可以对时间元素执行操作。pandas也可以将时间作为数据

5. 时间戳与时间跨度 Timestamps vs. Time Spans

时间戳数据是时间序列数据的最基本类型,它将值与时间点关联起来。对于panda对象,它意味着使用时间点。

时间跨度是指一个时期,period。周期表示的跨度可以明确指定,也可以从字符串中推断得到。

上述二者都可以成为index,而且如果是列表,则会自动被识别为index

6. 生成时间数据

6.1 常规日期时间数据生成方法

# 传进Series,返回的也是Seriespd.to_datetime(pd.Series(['Jul 31, 2009', '2010-01-10', None]))# 传进列表,返回的是一个DatetimeIndexpd.to_datetime(['2005/11/23', '2010.12.31'])# 传入dayfirst=True,设置解析日期时的格式是日-月-年,否则就是月-日-年pd.to_datetime(['12-01-2012', '01-12-2012'], dayfirst=False)# infer参数可以用于让计算机自己推测 时间间隔pd.DatetimeIndex(['2018-01-01', '2018-01-03', '2018-01-05'], freq='infer')


#通过format设置特定的解析模式pd.to_datetime('2010/11/12', format='%Y/%m/%d')


6.2从不同列中合并日期,生成时间数据

df = pd.DataFrame({'year': [2015, 2016], 'month': [2, 3],'day': [4, 5], 'hour': [2, 3]})# 用数据框的而不同列拼凑成一个日期数据pd.to_datetime(df)# 选特定的要素组成日期数据,必选的是年月日,可选的是时分秒等pd.to_datetime(df[['year', 'month', 'day']])

6.3 遇到无法解析数据的处理

# 有无法解析的直接全部报错pd.to_datetime(['2009/07/31', 'asd'], errors='raise')# 无法解析的忽略,原封不动返回pd.to_datetime(['2009/07/31', 'asd'], errors='ignore')# 无法解析的返回 空值pd.to_datetime(['2009/07/31', 'asd'], errors='coerce')


6.4 支持纪元时间和正常时间的转换
从元年开始,至今的秒数,可以转换为正常 年月日 的日期

pd.to_datetime([1349720105, 1349806505], unit='s')# 正常时间-某特定时间,转化成从特定时间至今的秒数(整数)(stamps - pd.Timestamp("1970-01-01")) // pd.Timedelta('1s')

6.5 使用origin创建时间

# 从1960-01-01起,分别加1,2,3。单位为Daypd.to_datetime([1, 2, 3], unit='D', origin=pd.Timestamp('1960-01-01'))

7. 生成带时间戳的index

# 两种方法均可以生成时间戳indexpd.DatetimeIndex(dates)pd.Index(dates)


7.1 生成大量的时间戳index

start = datetime.datetime(2011, 1, 1)end = datetime.datetime(2012, 1, 1)# date_range是自然日pd.date_range(start, end)# bdate_range是工作日pd.bdate_range(start, end)# 还可以传入开始,period,频率参数生成pd.date_range(start, periods=1000, freq='M')pd.bdate_range(start, periods=250, freq='BQS')# 传入首尾,频率pd.date_range(start, end, freq='BM')pd.date_range(start, end, freq='W')# 传入开始 或结尾,period参数pd.bdate_range(end=end, periods=20)     # 结束往前推20个周期pd.bdate_range(start=start, periods=20) # 开始往后推20个周期

# 指定开始、结束和周期,将生成一个从开始到结束均匀间隔的日期范围pd.date_range('2018-01-01', '2018-01-05', periods=5)pd.date_range('2018-01-01', '2018-01-05', periods=10)


7.2 略过节假日和选特定日期的参数

weekmask = 'Mon Wed Fri'        # 只能是 ‘Mon Tue Wed Thu Fri’ 多选holidays = [datetime.datetime(2011, 1, 5), datetime.datetime(2011, 3, 14)]# 设置holidays 和 mask,剔除holidays的日期,直选mask设定的周X,默认全部工作日pd.bdate_range(start, end, freq='C', weekmask=weekmask, holidays=holidays)

8. 时间index的特殊属性

# 日期或字符串解析数据可以作为索引ts[datetime.datetime(2011, 12, 25):]    # 选2011.12.25后的日期数据ts['10/31/2011':'12/31/2011']           # 切片选择数据ts['2011']                              # 按年份选择数据ts['2011-6']                            # 按年-月选择数据

# 数据框同样可以使用切片数据# 选到日的时候,右侧是闭的,选dft['2013-1':'2013-2']          # 最后一条2013/02的数据也会选入dft['2013-1':'2013-2-28']       # 2013.2.28的全部数据会被选入dft['2013-1':'2013-2-28 00:00:00']  # 有精确时间的,最后00:00:00被选入。
©著作权归作者所有:来自51CTO博客作者mb5fe18e5a55d8d的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Python与Tableau相结合,万字长文搞定传统线下连锁店数据分析
  2. 用python爬取4332条粽子数据进行分析
  3. 小伙子不讲武德,竟用Python爬取了B站上1.4w条马老师视频数据来分
  4. 数据分析师必知必会:AB测试项目复盘(附PPT、python源码)
  5. Python实现数据写入 Excel 的三种模块!
  6. 华为无线网络的配置——AP上的业务数据采用直接转发模式
  7. 昨晚试试 数据行转列,差点翻了车
  8. Python探索性数据分析,这样才容易掌握
  9. 用 Python 读取巴菲特最近的持仓数据

随机推荐

  1. android LinearLayout布局子空间没有填充
  2. android 获取控件真实高度
  3. Android多国语言文件夹命名
  4. Android(安卓)项目无法生成R文件解决办法
  5. Android当中的SeekBar与iOS中的UISlider
  6. 在android jni中使用log
  7. Android:时间控件
  8. android各个文件分析
  9. 创建Android SD卡遇到的问题
  10. CyanogenMod | Android Community Rom ba