数据导入与预处理-拓展-pandas时间数据处理02(上)

简介: 数据导入与预处理-拓展-pandas时间数据处理02Pandas时序数据系列博客Pandas时间序列数据处理1.好用的Python库

Pandas时间序列数据处理

1.好用的Python库

见系列博客1

2.Pandas历史

见系列博客1

3.时序数据处理

见系列博客1

本文部分内容来源为:joyful-pandas

3.1 时序中的基本对象

见系列博客1

3.2 python中的datetime模块

见系列博客1

3.3. 时间戳(Date times)的构造与属性

见系列博客1

3.4. 时间差(Timedelta)的构造与属性

概念 单元素类型 数组类型 pandas数据类型
Date times Timestamp DatetimeIndex datetime64[ns]
Time deltas Timedelta TimedeltaIndex timedelta64[ns]
Time spans Period PeriodIndex period[freq]
Date offsets DateOffset None None

1.Timedelta生成

1.通过pd.Timedelta来构造

时间差可以理解为两个时间戳的差,这里也可以通过pd.Timedelta来构造:

通过Timestamp构建时间差Timedelta

import numpy as np
import pandas as pd
pd.Timestamp('20220102 08:00:00')-pd.Timestamp('20220101 07:35:00')

输出为:

Timedelta('1 days 00:25:00')

通过Timedelta生成

pd.Timedelta(days=1, minutes=25) # 需要注意加s
# pd.Timedelta('1 days 25 minutes') # 字符串生成 同上一样

输出:

Timedelta('1 days 00:25:00')
2 to_timedelta生成

to_timedelta生成-精确到 20.5us

精确到 20.5us
pd.to_timedelta('20.5us')

输出为:

Timedelta('0 days 00:00:00.000020500')

to_timedelta生成-构建一个Timedelta序列

pd.to_timedelta(['2 days 04:06:10.00006', '15.5us', 'nan'])

输出为:

TimedeltaIndex(['2 days 04:06:10.000060', '0 days 00:00:00.000015500', NaT], dtype='timedelta64[ns]', freq=None)

to_timedelta生成-指定单位

pd.to_timedelta(np.arange(6), unit='d')

输出为:

TimedeltaIndex(['0 days', '1 days', '2 days', '3 days', '4 days', '5 days'], dtype='timedelta64[ns]', freq=No
3. timedelta_range生成

与date_range一样,时间差序列也可以用timedelta_range来生成,它们两者具有一致的参数:

import numpy as np
import pandas as pd
pd.timedelta_range(start='2 day', periods=5, freq='6H', closed='right')

输出为:

TimedeltaIndex(['2 days 06:00:00', '2 days 12:00:00', '2 days 18:00:00','3 days 00:00:00'],
dtype='timedelta64[ns]', freq='6H')
4. dt对象

对于Timedelta序列,同样也定义了dt对象,上面主要定义了的属性包括days, seconds, mircroseconds, nanoseconds,它们分别返回了对应的时间差特征。

2. Timedelta的运算

时间差支持的常用运算有三类:与标量的乘法运算、与时间戳的加减法运算、与时间差的加减法与除法运算:

# 初始化Timedelta
td1 = pd.Timedelta(days=1) # Timedelta('1 days 00:00:00')
td2 = pd.Timedelta(days=3) # Timedelta('3 days 00:00:00')
# 与标量的计算
td1 * 2 # Timedelta('2 days 00:00:00')
# 与时间差的计算
td2 - td1 # Timedelta('2 days 00:00:00')
# 与时间戳的计算
ts = pd.Timestamp('20200101')
td1 = pd.Timedelta(days=1) # Timedelta('1 days 00:00:00') 
ts + td1 # Timestamp('2020-01-02 00:00:00')

时间差序列计算:

# 定义时间差
td1 = pd.timedelta_range(start='1 days', periods=5)
td1 
"""
# TimedeltaIndex(['1 days', '2 days', '3 days', '4 days', '5 days'], 
                 dtype='timedelta64[ns]', freq='D')
"""
td2 = pd.timedelta_range(start='12 hours', freq='2H', periods=5)
td2 
"""
TimedeltaIndex(['0 days 12:00:00', '0 days 14:00:00', '0 days 16:00:00',
                '0 days 18:00:00', '0 days 20:00:00'],
               dtype='timedelta64[ns]', freq='2H')
"""
ts = pd.date_range('20200101', '20200105')
ts
"""
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
               '2020-01-05'],

时间差序列与标量计算:

td1 * 5
# TimedeltaIndex(['5 days', '10 days', '15 days', '20 days', '25 days'], dtype='timedelta64[ns]', freq='5D')

输出为:

TimedeltaIndex(['5 days', '10 days', '15 days', '20 days', '25 days'], dtype='timedelta64[ns]', freq='5D')

时间差序列与series计算

td1 * pd.Series(list(range(5))) # 逐个相乘

输出为:

0    0 days
1    2 days
2    6 days
3   12 days
4   20 days
dtype: timedelta64[ns]

时间差序列直接计算

td1 - td2

输出为:

TimedeltaIndex(['0 days 12:00:00', '1 days 10:00:00', '2 days 08:00:00',
                '3 days 06:00:00', '4 days 04:00:00'],
               dtype='timedelta64[ns]', freq=None)

时间差序列与时间戳计算:

td1 + pd.Timestamp('20200101')

输出为:

DatetimeIndex(['2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05',
               '2020-01-06'],
              dtype='datetime64[ns]', freq='D')

3.5 时间段Time spans的构造与属性:Period

概念 单元素类型 数组类型 pandas数据类型
Date times Timestamp DatetimeIndex datetime64[ns]
Time deltas Timedelta TimedeltaIndex timedelta64[ns]
Time spans Period PeriodIndex period[freq]
Date offsets DateOffset None None
1. 通过Period生成
# 生成一个以2022-01开始,月为频率的时间构造器
# pd.Period()参数:一个时间戳 + freq 参数 → freq 用于指明该 period 的长度,时间戳则说明该 period 在时间轴上的位置
period_d = pd.Period('2022', freq = 'M')
print(period_d, type(period_d))
# 通过加减整数,将周期整体移动
# 这里是按照 月、年 移动
print('period_d + 1的结果为:',period_d + 1)
print('period_d - 2的结果为:',period_d - 2)
print(pd.Period('2022', freq = 'A-DEC') - 1)

输出为:

2022-01 <class 'pandas._libs.tslibs.period.Period'>
period_d + 1的结果为: 2022-02
period_d - 2的结果为: 2021-11
2021
2. 通过period_range方法生成
# pd.period_range()创建时期范围
prng = pd.period_range('1/1/2021', '1/1/2022', freq='M')
print(prng,type(prng))
print(prng[0],type(prng[0]))
# 数据格式为PeriodIndex,单个数值为Period

输出为:

PeriodIndex(['2021-01', '2021-02', '2021-03', '2021-04', '2021-05', '2021-06',
             '2021-07', '2021-08', '2021-09', '2021-10', '2021-11', '2021-12',
             '2022-01'],
            dtype='period[M]', freq='M') <class 'pandas.core.indexes.period.PeriodIndex'>
2021-01 <class 'pandas._libs.tslibs.period.Period'>

构建series,指定索引为PeriodIndex

ts = pd.Series(np.arange(len(prng)), index = prng)
print(ts,type(ts))
print(ts.index)
# 时间序列

输出为:

2021-01     0
2021-02     1
2021-03     2
2021-04     3
2021-05     4
2021-06     5
2021-07     6
2021-08     7
2021-09     8
2021-10     9
2021-11    10
2021-12    11
2022-01    12
Freq: M, dtype: int32 <class 'pandas.core.series.Series'>
PeriodIndex(['2021-01', '2021-02', '2021-03', '2021-04', '2021-05', '2021-06',
             '2021-07', '2021-08', '2021-09', '2021-10', '2021-11', '2021-12',
             '2022-01'],
            dtype='period[M]', freq='M')
3. asfreq:频率转换
# asfreq:频率转换
# Period('2020', freq = 'A-DEC')可以看成多个时间期的时间段中的游标
# Timestamp表示一个时间戳,是一个时间截面;Period是一个时期,是一个时间段!!但两者作为index时区别不大
p = pd.Period('2020','A-DEC')
print("p--->",p)
print("p--->",p.asfreq('M', how = 'start'))  # 也可写 how = 's'
print("p--->",p.asfreq('D', how = 'end'))  # 也可写 how = 'e'
# 通过.asfreq(freq, method=None, how=None)方法转换成别的频率
print('*'*10)
prng = pd.period_range('2020','2021',freq = 'M')
ts1 = pd.Series(np.random.rand(len(prng)), index = prng)
ts2 = pd.Series(np.random.rand(len(prng)), index = prng.asfreq('D', how = 'start'))
print(ts1.head(),len(ts1))
print(ts2.head(),len(ts2))
# asfreq也可以转换TIMESeries的index

输出为:

p---> 2020
p---> 2020-01
p---> 2020-12-31
**********
2020-01    0.602249
2020-02    0.470631
2020-03    0.515769
2020-04    0.221421
2020-05    0.959175
Freq: M, dtype: float64 13
2020-01-01    0.115775
2020-02-01    0.309005
2020-03-01    0.738583
2020-04-01    0.785310
2020-05-01    0.574895
Freq: D, dtype: float64 13


相关文章
|
1月前
|
数据采集 数据挖掘 大数据
数据处理利器:使用Pandas进行数据清洗与转换
【4月更文挑战第12天】在大数据时代,Pandas是Python数据分析的关键工具,提供高效的数据清洗和转换功能。本文介绍了如何使用Pandas处理缺失值(删除或填充)、异常值(Z-Score法和IQR法)以及重复值(检测和删除)。此外,还涵盖了数据转换,包括数据类型转换、数据标准化(Min-Max和Z-Score)以及类别数据的one-hot编码。通过学习这些方法,可以为数据分析和挖掘奠定坚实基础。
|
24天前
|
数据采集 机器学习/深度学习 自然语言处理
《Pandas 简易速速上手小册》第7章:Pandas 文本和类别数据处理(2024 最新版)
《Pandas 简易速速上手小册》第7章:Pandas 文本和类别数据处理(2024 最新版)
31 1
|
24天前
|
数据采集 数据挖掘 数据处理
《Pandas 简易速速上手小册》第2章:Pandas 数据导入与导出(2024 最新版)
《Pandas 简易速速上手小册》第2章:Pandas 数据导入与导出(2024 最新版)
57 1
|
27天前
|
数据处理 索引 Python
Pandas常见问题与解决方案:避开数据处理中的坑
【4月更文挑战第16天】本文总结了Pandas数据处理中的常见问题及解决方案:1) 数据类型不匹配,使用`astype`转换;2) 缺失值处理,用`dropna`删除或`fillna`填充;3) 内存占用过大,通过选择性加载列、指定`dtype`和使用`chunksize`分块处理;4) 合并数据问题,确保键匹配和正确合并方式;5) 排序和分组聚合错误,使用`sort_values`/`sort_index`和`groupby`配合聚合函数。掌握这些技巧可提高数据处理效率。
|
27天前
|
SQL 机器学习/深度学习 数据可视化
Pandas与其他库的集成:构建强大的数据处理生态
【4月更文挑战第16天】Pandas在数据处理中扮演关键角色,但与其他Python库如NumPy、Matplotlib/Seaborn、Scikit-learn和SQL的集成使其功能更加强大。结合NumPy进行数值计算,搭配Matplotlib/Seaborn实现高效可视化,与Scikit-learn联用加速机器学习,以及与SQL集成便于数据库操作,这些都构建了一个全面的数据处理生态系统,提升了数据科学家的工作效率,助力于数据价值的发掘。
|
27天前
|
并行计算 数据挖掘 数据处理
Pandas性能优化与高级功能:让数据处理更高效
【4月更文挑战第16天】本文探讨了如何优化Pandas的性能和利用其高级功能。关键的性能优化方法包括选择合适的数据类型、避免数据复制、使用向量化操作、优化查询和索引,以及探索并行计算。高级功能涉及分组聚合、窗口函数、数据透视表、缺失值处理和分类数据编码。通过这些技巧,可以更高效地处理大规模数据集。
|
27天前
|
数据采集 算法 数据挖掘
数据处理与清洗:Pandas助力数据质量提升
【4月更文挑战第16天】Pandas是Python中用于数据处理的关键库,它提供了解决数据清洗问题的多种工具。包括处理缺失值(如删除或填充)、检测并去除重复值、识别及处理异常值、数据类型转换和标准化、以及数据合并与连接。通过熟练运用这些功能,数据科学家能提升数据质量,为准确的分析和建模打下基础。
|
27天前
|
SQL 存储 数据处理
Pandas入门指南:开启数据处理之旅
【4月更文挑战第16天】Pandas是Python中的数据处理库,提供高性能数据结构Series和DataFrame,简化数据操作。要开始使用,先安装Pandas:`pip install pandas`,然后`import pandas as pd`。Series是一维标签数组,DataFrame是二维表格数据。Pandas支持读写CSV、Excel、SQL数据,以及数据清洗、处理、筛选和排序。它是数据科学家和分析师处理结构化数据的得力工具。开始你的Pandas数据之旅吧!
|
2月前
|
数据采集 自然语言处理 数据可视化
使用Pandas库对淘宝原始数据进行数据处理和分词处理
使用Pandas库对淘宝原始数据进行数据处理和分词处理
31 0
|
2月前
|
数据采集 数据可视化 数据挖掘
Python爬虫之Pandas数据处理技术详解
Python爬虫之Pandas数据处理技术详解