Pandas中时间序列的处理大全

这篇文章主要给大家介绍了关于Pandas中时间序列处理的相关资料,pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的,需要的朋友可以参考下

目录

一、时间序列数据的生成

二、Pandas设置索引

三、 时间序列数据的截取

四、Pandas重复值处理

4.1 查询是否有重复值

4.2 去除重复值

五、Pandas缺失值处理

5.1 缺失值查询

六、pandas统计计算方法

七、Pandas数据重采样

总结

一、时间序列数据的生成

pd.date_ranges生成时间序列time格式:年月日分隔符号可以是"-","/",空格这三种格式(年月日、日月年、月日年都可以);时分秒只能用":"分隔,顺序只能是时分秒。start:起始时间(time)end:终止时间(time)periods:期数(int),使用时只能出现start或者end,两者不能同时出现freq:频率(numY,num年;numM,num月;numD,num日),详细参数见下表频率别名描述B工作日频率C自定义工作日频率D日历日频率W每周频率M每月最后一个日历日SM每半个月最后一个日历日(15日和月末)BM每月最后一个工作日CBM自定义每月最后一个工作日MS每月第一个日历日SMS每半月第一个日历日(第1和第15)BMS每月第一个工作日CBMS自定义每月第一个工作日Q每季度最后一个月的最后一个日历日BQ每季度最后一个月的最后一个工作日QS每季度最后一个月的第一个日历日BQS每季度最后一个月的第一个工作日A, Y每年的最后一个日历日BA, BY每年的最后一个工作日AS, YS每年的第一个日历日BAS, BYS每年的第一个工作日BH工作日按“时”计算频率H每小时频率T, min每分钟频率S每秒频率L, ms毫秒频率U, us微秒频率N纳秒频率import pandas as pd import numpy as np df = pd.DataFrame( data=np.random.randint(1,20,10), index=pd.date_range(start="20/01/2021",periods=10,freq="M"),) print(df)             02021-01-31   12021-02-28   62021-03-31  122021-04-30   52021-05-31   72021-06-30   42021-07-31   92021-08-31   72021-09-30  182021-10-31  10             0count  10.00000mean    7.90000std     4.72464min     1.0000025%     5.2500050%     7.0000075%     9.75000max    18.00000

二、Pandas设置索引

创建时添加索引

pd.DataFrame(...,index=[],...)

df.set_index使用现有列设置索引

keys:列名,多个列用[name1,name2]

drop:设置升序(True)、降序(False)

inplace:替换原变量(True),不替换(False)

df.set_index(["X"],inplace=True) df.set_index(["X","Y"],inplace=True)

df.reset_index可以还原索引

df.reset_index("X")

三、 时间序列数据的截取

df.truncate过滤数据

before:过滤之前的数据(time)

after:过滤之后的数据(time)

axis:列(columns),行(index)

df.truncate(before="2021-5",after="2021-9")

           0

2021-05-31  7

2021-06-30  4

2021-07-31  9

2021-08-31  7

df.loc索引过滤

df.loc["2021-5":]

             0

2021-05-31   7

2021-06-30   4

2021-07-31   9

2021-08-31   7

2021-09-30  18

2021-10-31  10

四、Pandas重复值处理

4.1 查询是否有重复值

duplicated()方法判断

# 判断dataframe数据整行是否重复 df.duplicated() # dataframe数据某列是否重复 df.columns_name.duplicated() # 判断dataframe数据多列数据是否重复(多列组合查) df.duplicated(subset = ['n1','n2'])

groupby().count()

df.groupby('columns').count()>1

4.2 去除重复值

drop_duplicats参数说明:

参数subset:用来指定特定的列,认所有列

参数keep:first和last表示是选择最前一项还是最后一项保留,认first

参数inplace:是直接在原来数据上修改还是保留一个副本,认为False

df.drop_duplicats(subset=['name1','name2'],keep='last',inplace=True)

按照index索引去重

df.index.duplicated(keep='last')

五、Pandas缺失值处理

5.1 缺失值查询

df.info查询各列的信息

df.info() # res Int64Index: 10 entries, 19 to 14 Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Y 10 non-null int32 1 Z 10 non-null int32 dtypes: int32(2) memory usage: 160.0 bytes

df.isnull判断是否是空值

df.isnull().any() # 筛选出缺失值的列 df.isna().any() # 筛选出缺失值的列

df.empty判断是否有空值

df.empty

5.2 缺失值填充

ffill 空值取前面的值

df.ffill()

bfill 空值取后面的值

df.bfill()

fillna 指定值填充

df.fillna(1) df.fillna({'A': 0, 'B': 1, 'C': 2, 'D': 3}) # 指定列填充

interpolate 插值

df.interpolate(method=‘linear', axis=0, limit=None, inplace=False, limit_direction=‘forward', limit_area=None, downcast=None, **kwargs)

method参数解释

linear:忽略索引,线性等距插值

time:在以天或者更高频率的数据上插入给定的时间间隔长度数据

index, values:使用索引的实际数值

pad:使用现有值填写NaN

nearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial:传递给scipy.interpolate.interp1d。这些方法使用索引的数值。polynomial和spline都要求您还指定一个顺序(int),例如 ,df.interpolate(method=‘polynomial', order=5)

krogh,piecewise_polynomial,spline,pchip,akima:包括类似名称的SciPy插值方法

from_derivatives:指 scipy.interpolate.Bpoly.from_derivatives,它替换了scipy 0.18中的'piecewise_polynomial'插值方法

axis : {0或'index',1或'columns',None},认为None;沿轴进行interpolate。

limit: int;要填充的连续NaN的最大数量。必须大于0

inplace : bool,认为False;如果可以,更新现有数据

limit_direction : {‘forward',‘backward',‘both'},认为'forward';如果指定了限制,则将沿该方向填充连续的NaN

limit_area : {None, ‘inside', ‘outside'}, 认为None;如果指定了限制,则连续的NaN将填充此限制。

None:无填充限制

inside:仅填充有效值包围的NaN

outside: 仅在有效值之外填充NaN

dff.interpolate(method='polynomial',order=2)

删除缺失值

df.dropna(how='any')

六、pandas统计计算方法

方法

说明

count

非NaN值的数理

describe

列计算统计汇总

min、max

最小值和最大值

argmin、argmax

最小值和最大值索引(int)

idxmin、idxmax

最小值和最大值索引

quantile

分位数([0,1],0.25下四分为)

sum

总和

mean

均值

median

0.5分位数,中位数

mad

根据均值计算绝对离差

var

方差

std

标准差

df.describe()

七、Pandas数据重采样

重采样就是基于时间数据由一个频率转换到另一个频率的方法,分为降采样和升采样。

降采样:高频率===>低频率,如频率日变为月,需要指定统计函数如sum

df.resample("M").mean()

升采样:低频率===>高频率,如频率月变为日,需要进行缺失值填充

df.resample("D").asfreq().fillna(1)

总结

到此这篇关于Pandas中时间序列处理的文章就介绍到这了,更多相关Pandas时间序列处理内容搜索编程之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程之家!

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...