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

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

时间序列夹杂其他格式errors参数:

# 当一组时间序列中夹杂其他格式数据,可用errors参数返回
# errors = 'ignore':不可解析时返回原始输入,这里就是直接生成一般数组
date1 = ['2020-2-1','2020-2-2','2020-2-3','hello world!','2020-2-5','2020-2-6']
t1 = pd.to_datetime(date1, errors = 'ignore')
print(t1,type(t1))
print("*"*10)
# errors = 'coerce':不可扩展,缺失值返回NaT(Not a Time),结果认为DatetimeIndex
t2 = pd.to_datetime(date1, errors = 'coerce')
print(t2,type(t2))

输出为:


2. date_range方法

date_range是一种生成连续间隔时间的一种方法,其重要的参数为start, end, freq, periods,它们分别表示开始时间,结束时间,时间间隔,时间戳个数。其中,四个中的三个参数决定了,那么剩下的一个就随之确定了。这里要注意,开始或结束日期如果作为端点则它会被包含:

# pd.date_range()-日期范围:生成日期范围
# 2种生成方式:①start + end; ②start/end + periods
# 默认频率:day
# normalize:时间参数值正则化到午夜时间戳
rng1 = pd.date_range('1/1/2020','1/3/2020',name = 'index_name', normalize=True)
rng2 = pd.date_range(start = '1/1/2020 10:10', periods = 3, normalize=True)
rng3 = pd.date_range(end = '1/30/2020 15:00:00', periods = 3)  # 增加了时、分、秒
print(rng1)
print(rng2)
print(rng3)
print('-------')
# 直接生成DatetimeIndex
# pd.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None, **kwargs)
# start:开始时间
# end:结束时间
# periods:偏移量
# freq:频率,默认天,pd.date_range()默认频率为日历日,pd.bdate_range()默认频率为工作日
# tz:时区
# normalize:时间参数值正则化到午夜时间戳(这里最后就直接变成0:00:00,并不是10:10:00)
# name:索引对象名称
# closed:默认为None的情况下,左闭右闭,left则左闭右开,right则左开右闭
print(pd.date_range('20200101','20200104'))  # 20170101也可读取
# print(pd.date_range('20200101','20200104',closed = 'right'))
# print(pd.date_range('20200101','20200104',closed = 'left'))
print('-------')
# closed:默认为None的情况下,左闭右闭,left则左闭右开,right则左开右闭
# pd.bdate_range()默认频率为工作日
print(pd.bdate_range('20200101','20200107'))
print('-------')
# pd.bdate_range()默认频率为工作日

输出为:

DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03'], dtype='datetime64[ns]', name='index_name', freq='D')
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03'], dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2020-01-28 15:00:00', '2020-01-29 15:00:00',
               '2020-01-30 15:00:00'],
              dtype='datetime64[ns]', freq='D')
-------
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04'], dtype='datetime64[ns]', freq='D')
-------
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-06',
               '2020-01-07'],
              dtype='datetime64[ns]', freq='B')
-------
[Timestamp('2020-01-01 00:00:00', freq='D'), Timestamp('2020-01-02 00:00:00', freq='D'), Timestamp('2020-01-03 00:00:00', freq='D')]

freq参数的设置


pd.date_range()-日期范围:频率(1)

默认freq = ‘D’:每日历日

B:每工作日

H:每小时

T/MIN:每分

S:每秒

L:每毫秒(千分之一秒)

U:每微秒(百万分之一秒)

freq = ‘W-MON’ # W-MON:从指定星期几开始算起,每周

星期几缩写:MON/TUE/WED/THU/FRI/SAT/SUN

freq = ‘WOM-2MON’

WOM-2MON:每月的第几个星期几开始算,这里是每月第二个星期一


pd.date_range()-日期范围:频率(2)

M:每月最后一个日历日

Q-月:Q-DEC指定月为季度末,每个季度末最后一月的最后一个日历日

A-月:A-DEC每年指定月份的最后一个日历日

月缩写:JAN/FEB/MAR/APR/MAY/JUN/JUL/AUG/SEP/OCT/NOV/DEC

所以Q-月只有三种情况:1-4-7-10,2-5-8-11,3-6-9-12

BM:每月最后一个工作日

BQ-月:BQ-DEC指定月为季度末,每个季度末最后一月的最后一个工作日

BA-月:BA-DEC每年指定月份的最后一个工作日,这里是12月

M:MS每月第一个日历日

Q-月:QS-DEC指定月为季度末,每个季度末最后一月的第一个日历日

A-月:AS-DEC每年指定月份的第一个日历日

BM:BMS每月第一个工作日

BQ-月:BQS-DEC指定月为季度末,每个季度末最后一月的第一个工作日

BA-月:BAS-DEC每年指定月份的第一个工作日


pd.date_range()-日期范围:复合频率

freq = ‘7D’ # 7天

freq = ‘2h30min’ # 2小时30分钟

freq = ‘2M’ # 2月,每月最后一个日历日

# asfreq:时期频率转换
ts = pd.Series(np.random.rand(4),
              index = pd.date_range('20170101','20170104'))
print(ts)
print(ts.asfreq('12H',method = 'ffill'))
# 改变频率,这里是D改为12H
# method:插值模式,None不插值,ffill用之前值填充,bfill用之后值填充

输出为:


# pd.date_range()-日期范围:超前/滞后数据
ts = pd.Series(np.arange(4),
              index = pd.date_range('20200101','20200104'))
print(ts)
print(ts.shift(2))
# print(ts.shift(-2))
print('------')
# 正数:数值后移(滞后);负数:数值前移(超前)
per = ts/ts.shift(1) - 1
print(per)
print('------')
# 计算变化百分比,这里计算:该时间戳与上一个时间戳相比,变化百分比
print(ts.shift(2, freq = 'D')) # 天
# print(ts.shift(2, freq = 'T')) # 小时
# 加上freq参数:对时间戳进行位移,而不是对数值进行位移

输出为:


3. dt对象

在时序类型的序列上定义了dt对象来完成许多时间序列的相关操作。这里对于datetime64[ns]类型而言,可以大致分为三类操作:取出时间相关的属性、判断时间戳是否满足条件、取整操作。


第一类操作的常用属性包括:date, time, year, month, day, hour, minute, second, microsecond, nanosecond, dayofweek, dayofyear, weekofyear, daysinmonth, quarter,其中daysinmonth, quarter分别表示该月一共有几天和季度。

s = pd.Series(pd.date_range('2020-1-1','2020-1-3', freq='D'))
s.dt.date # 日期
# s.dt.time 时间

输出为:

0    2020-01-01
1    2020-01-02
2    2020-01-03
dtype: object

此外,可以通过month_name, day_name返回英文的月名和星期名,注意它们是方法而不是属性:

print(s.dt.month_name())
print(s.dt.day_name())

输出为:

0    January
1    January
2    January
dtype: object
0    Wednesday
1     Thursday
2       Friday
dtype: object

第二类判断操作主要用于测试是否为月/季/年的第一天或者最后一天:

# 第二类判断操作主要用于测试是否为月/季/年的第一天或者最后一天:
print(s.dt.is_year_start) # 还可选 is_quarter/month_start
s.dt.is_year_end # 还可选 is_quarter/month_end

输出为:

0     True
1    False
2    False
dtype: bool
0    False
1    False
2    False
dtype: bool

第三类的取整操作包含round, ceil, floor,它们的公共参数为freq,常用的包括H, min, S(小时、分钟、秒)

s = pd.Series(pd.date_range('2020-1-1 20:35:00', '2020-1-1 22:35:00', freq='45min'))
print(s)
print(s.dt.round('1H'))
print(s.dt.ceil('1H'))
print(s.dt.floor('1H'))

输出为:

0   2020-01-01 20:35:00
1   2020-01-01 21:20:00
2   2020-01-01 22:05:00
dtype: datetime64[ns]
0   2020-01-01 21:00:00
1   2020-01-01 21:00:00
2   2020-01-01 22:00:00
dtype: datetime64[ns]
0   2020-01-01 21:00:00
1   2020-01-01 22:00:00
2   2020-01-01 23:00:00
dtype: datetime64[ns]
0   2020-01-01 20:00:00
1   2020-01-01 21:00:00
2   2020-01-01 22:00:00
dtype: datetime64[ns]

4. 时间戳的切片和索引

一般而言,时间戳序列作为索引使用。如果想要选出某个子时间戳序列,第一类方法是利用dt对象和布尔条件联合使用,另一种方式是利用切片,后者常用于连续时间戳。下面,举一些例子说明:

构建series:

s = pd.Series(np.random.randint(2,size=366), index=pd.date_range('2020-01-01','2020-12-31'))
s.head()

输出为:


利用dt对象和布尔条件过滤

idx = pd.Series(s.index).dt
print(idx)
s[(idx.is_month_start|idx.is_month_end).values].head()

输出为:


取出5月到7月15日中间的数据

s['2020-05':'2020-7-15'].head()
• 1

输出为:

相关文章
|
10月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
688 0
|
10月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
759 0
|
12月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
854 0
|
运维 数据挖掘 数据处理
Pandas时间数据处理:从基础到进阶的实战指南
Pandas时间数据处理涵盖了从基础到高级的全面功能。其核心由Timestamp、DatetimeIndex、Period和Timedelta四个类构建,支持精准的时间点与区间操作。内容包括时间数据生成(字符串解析与序列生成)、时间索引与切片、高级运算(偏移重采样与窗口计算)、时区处理、周期性数据分析及实战案例(如智能电表数据)。此外,还涉及性能优化技巧和未来展望,帮助用户高效处理时间序列数据并应用于预测分析等场景。
585 1
|
传感器 安全 数据处理
Pandas时间数据处理:从基础到进阶的实战指南
本文深入讲解Pandas时间数据处理技巧,从时间对象转换到高性能计算全面覆盖。通过真实案例拆解,掌握Timestamp与Period的核心概念、时间序列生成、重采样方法及窗口函数应用。同时剖析时区处理、性能优化策略及常见陷阱解决方案,并展望Pandas 2.0的时间处理新特性。内容强调“时间索引优先”原则,助你高效分析股票K线、用户行为等时间序列数据。
538 0
|
缓存 数据可视化 BI
Pandas高级数据处理:数据仪表板制作
在数据分析中,面对庞大、多维度的数据集(如销售记录、用户行为日志),直接查看原始数据难以快速抓住重点。传统展示方式(如Excel表格)缺乏交互性和动态性,影响决策效率。为此,我们利用Python的Pandas库构建数据仪表板,具备数据聚合筛选、可视化图表生成和性能优化功能,帮助业务人员直观分析不同品类商品销量分布、省份销售额排名及日均订单量变化趋势,提升数据洞察力与决策效率。
414 12
|
数据可视化 数据挖掘 数据处理
Pandas高级数据处理:数据可视化进阶
Pandas是数据分析的强大工具,能高效处理数据并与Matplotlib、Seaborn等库集成,实现数据可视化。本文介绍Pandas在绘制基础图表(如折线图)和进阶图表(如分组柱状图、热力图)时的常见问题及解决方案,涵盖数据准备、报错处理、图表优化等内容,并通过代码案例详细解释,帮助读者掌握数据可视化的技巧。
417 13
|
数据采集 SQL 数据可视化
Pandas高级数据处理:交互式数据探索
Pandas是Python中流行的数据分析库,提供丰富的数据结构和函数,简化数据操作。本文从基础到高级介绍Pandas的使用,涵盖安装、读取CSV/Excel文件、数据查看与清洗、类型转换、条件筛选、分组聚合及可视化等内容。掌握这些技能,能高效进行交互式数据探索和预处理。
353 6
|
数据采集 存储 数据可视化
Pandas高级数据处理:数据报告生成
Pandas 是数据分析领域不可或缺的工具,支持多种文件格式的数据读取与写入、数据清洗、筛选与过滤。本文从基础到高级,介绍如何使用 Pandas 进行数据处理,并解决常见问题和报错,如数据类型不一致、时间格式解析错误、内存不足等。最后,通过数据汇总、可视化和报告导出,生成专业的数据报告,帮助你在实际工作中更加高效地处理数据。
505 8
|
存储 数据挖掘 数据处理
Pandas高级数据处理:数据安全与隐私保护
在数字化时代,数据安全与隐私保护至关重要。本文介绍使用Pandas进行数据分析时常见的安全问题及解决方案,包括数据泄露风险、权限报错、数据类型转换错误等,并结合代码案例详细讲解如何避免和解决这些问题。同时,探讨高级策略如访问控制、匿名化、差分隐私及加密传输存储,确保数据分析合法合规。
517 7

热门文章

最新文章