欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【python】用pandas处理时序数据处理与高效处理建议

程序员文章站 2022-06-30 22:13:11
笔者最近在一家金融公司的数据部门实习,主要运用 python 的 pandas 进行数据清洗,主要涉及到时序数据处理和效率优化...

【python】用pandas处理时序数据处理

缘起

笔者最近在一家金融公司的数据部门实习,主要运用 pythonpandas 进行数据清洗,经过几天的面向百度/开发文档编程,积累了一些经验,特在此总结记录下。

注意:本文约定已经将pandas以如下方式导入:

import pandas as pd

干货分享

时序数据处理

pandas中包含四种主要的时间相关的数据类型。以下引用翻译自pandas官方文档

pandas拥有了4个与时间相关的概念:

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

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

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

  4. 日期偏移量:考虑了日历计算的相对持续时间。与dateutil包中的dateutil.relativedelta.relativedelta相似。

这四个概念分别对应的方法如下:

概念 标量类 数组类 pandas Data Type 主要的构造方法
时间日期 Timestamp DatetimeIndex datetime64[ns] or datetime64[ns, tz] to_datetime or date_range
时间增量 Timedelta TimedeltaIndex timedelta64[ns] to_timedelta or timedelta_range
时间范围 Period PeriodIndex period[freq] Period or period_range
日期偏移量 DateOffset None None DateOffset

时间日期戳 Timestamp

  • 构造pandas的时间戳

    pd.to_datetime('2020-07-06')
    # 将得到如下pandas的内置时间戳
    # Timestamp('2020-07-06 00:00:00')
    
    # pandas的to_datetime函数可以解析多种格式的时间字符串
    pd.to_datetime('06/07/2020') # 年份在前和日期在前的都可以解析
    # 将得到如下pandas的内置时间戳
    # Timestamp('2020-06-07 00:00:00')
    
    # 还可以解析unix时间戳
    pd.to_datetime(1594044764, unit='s') # 根据unit精度不同可以调整unit参数的值,如ms,ns等
    # 将得到如下pandas的内置时间戳
    # Timestamp('2020-07-06 14:12:44')
    
  • 构造时间序列

    pd.date_range('2020-07-01',periods=30,freq='D')
    # 将得到如下时间索引
    # DatetimeIndex(['2020-07-01', '2020-07-02', '2020-07-03', '2020-07-04',
    #              '2020-07-05', '2020-07-06', '2020-07-07', '2020-07-08',
    #               '2020-07-09', '2020-07-10', '2020-07-11', '2020-07-12',
    #               '2020-07-13', '2020-07-14', '2020-07-15', '2020-07-16',
    #               '2020-07-17', '2020-07-18', '2020-07-19', '2020-07-20',
    #               '2020-07-21', '2020-07-22', '2020-07-23', '2020-07-24',
    #               '2020-07-25', '2020-07-26', '2020-07-27', '2020-07-28',
    #               '2020-07-29', '2020-07-30'],
    #              dtype='datetime64[ns]', freq='D')
    
  • 时间增量 Timedelta

    主要是用于时间戳的加减运算

    t1 = pd.to_datetime('06/07/2020')
    t2 = pd.to_datetime('30/07/2020')
    t2 - t1
    # 将得到如下两个日期的时间增量
    # Timedelta('53 days 00:00:00')
    
    (t2-t1).days 
    # 将得到如下两个日期日期相差天数
    # 53
    
    # Timedelata可以直接获得的属性有days,seconds和microseconds,但是seconds不会从days直接转换过来,例如
    (t2-t1).seconds
    # 0
    
    

未完待续….


如有帮助,欢迎点赞/转载~
(听说给文章点赞的人代码bug特别少