【python】用pandas处理时序数据处理与高效处理建议
程序员文章站
2022-03-31 11:20:38
笔者最近在一家金融公司的数据部门实习,主要运用 python 的 pandas 进行数据清洗,主要涉及到时序数据处理和效率优化...
【python】用pandas处理时序数据处理
缘起
笔者最近在一家金融公司的数据部门实习,主要运用 python
的 pandas
进行数据清洗,经过几天的面向百度/开发文档编程,积累了一些经验,特在此总结记录下。
注意:本文约定已经将pandas
以如下方式导入:
import pandas as pd
干货分享
时序数据处理
pandas
中包含四种主要的时间相关的数据类型。以下引用翻译自pandas官方文档
pandas拥有了4个与时间相关的概念:
日期时间:具有时区支持的特定日期和时间。与标准库中的datetime.datetime相似。
时间增量:绝对持续时间。与标准库中的datetime.timedelta类似。
时间跨度:由时间点及其相关频率定义的时间跨度。
日期偏移量:考虑了日历计算的相对持续时间。与dateutil包中的dateutil.relativedelta.relativedelta相似。
这四个概念分别对应的方法如下:
概念 标量类 数组类 pandas Data Type 主要的构造方法 时间日期 Timestamp
DatetimeIndex
datetime64[ns]
ordatetime64[ns, tz]
to_datetime
ordate_range
时间增量 Timedelta
TimedeltaIndex
timedelta64[ns]
to_timedelta
ortimedelta_range
时间范围 Period
PeriodIndex
period[freq]
Period
orperiod_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特别少