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)
0
2021-01-31 1
2021-02-28 6
2021-03-31 12
2021-04-30 5
2021-05-31 7
2021-06-30 4
2021-07-31 9
2021-08-31 7
2021-09-30 18
2021-10-31 10
0
count 10.00000
mean 7.90000
std 4.72464
min 1.00000
25% 5.25000
50% 7.00000
75% 9.75000
max 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 <class 'pandas.core.frame.DataFrame'> 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时间序列处理内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
相关文章
- 这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
pandas pd.read_csv()函数中parse_dates()参数的用法说明
这篇文章主要介绍了pandas pd.read_csv()函数中parse_dates()参数的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-05mysql中获取一天、一周、一月时间数据的各种sql语句写法
创建表:复制代码 代码如下:create table if not exists t( id int, addTime datetime default '0000-00-00 00:00:00′)添加两条初始数据:insert t values(1, '2012-07-12 21:00:00′);insert t values(2, '2012-07...2014-05-31- 这篇文章主要介绍了.NET/C# 使用Stopwatch测量运行时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 想在网页中动态地显示当前系统的时间,找了好多,不过都是一些停在那里不动的。。。不过皇天不负有心人,终于让我找到了...2020-06-25
- 这篇文章主要介绍了JavaScript时间操作之级联日期选择操作,涉及到年、月、日、星期,感兴趣的小伙伴们可以参考一下...2016-01-18
- 今天小编就为大家分享一篇Pandas实现DataFrame按行求百分数(比例数),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-09
- 本文主要介绍了python使用pandas按照行数分割表格,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-13
- 实例讲解之前,先来介绍几个核心函数: mktime 函数 mktime() 函数返回一个日期的 Unix 时间戳。 参数总是表示 GMT 日期,因此 is_dst 对结果没有影响。 参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。...2015-11-08
- 这篇文章主要介绍了postgresql重置序列起始值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-04
- 常用的日期时间正则表达式 下面收藏了大量的日期时间正则匹配函数,包括分钟,时间与秒都能达到。 正则表达式 (?n:^(?=d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(...2016-11-25
- 这篇文章主要介绍了postgresql 中的时间处理小技巧(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29
- 我打开android开发手册的时候:http://www.csdn123.com/html/android/reference/packages.html 发现打开速度很慢,我用按了一下F12打开调试面板,切换到网络的选项卡network...2016-05-19
- 这篇文章主要介绍了C# 当前系统时间获取及时间格式详解的相关资料,这里提供代码实例,帮助大家学习参考,需要的朋友可以参考下...2020-06-25
- /*解决代码高亮太长不换行*/ .syntaxhighlighter{word-break:break-all;} uParse('#newstext', {rootPath: '/e/extend/ueditor/'}) 帝国CMS显示指定时间内更新的信息数...2016-11-01
- 这篇文章主要给大家介绍了关于C#使用TimeSpan时间计算的相关资料,以及通过一个实例代码给大家介绍了C#使用timespan和timer完成一个简单的倒计时器的方法,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧...2020-06-25
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
php获取今日开始时间戳和结束时间戳$beginToday=mktime(0,0,0,date('m'),date('d'),date('Y'));$endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;//php获取昨日起始时间戳和结束时间...2013-10-04- 这篇文章主要介绍了C#获取文件创建时间的方法,涉及C#文件操作的技巧及CreattionTime属性的使用方法,需要的朋友可以参考下...2020-06-25
PowerShell中使用Get-Date获取日期时间并格式化输出的例子
这篇文章主要介绍了PowerShell中使用Get-Date获取日期时间并格式化输出的例子,本文讲解了直接调用Get-Date、在Write-Host中使用Get-Date、格式化输出的方法,需要的朋友可以参考下...2020-06-30