这篇文章主要给大家介绍了关于Pandas中时间序列处理的相关资料,pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的,需要的朋友可以参考下
目录
一、时间序列数据的生成
二、Pandas设置索引
三、 时间序列数据的截取
四、Pandas重复值处理
4.1 查询是否有重复值
4.2 去除重复值
五、Pandas缺失值处理
5.1 缺失值查询
七、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时间序列处理内容请搜索编程之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程之家!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。