Pandas使用DataFrame进行数据分析比赛进阶之路(二):日期数据处理:按日期筛选、显示及统计数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/article/details/79791190

首先,表格的数据格式如下:

1、获取某年某月数据

data_train = pd.read_csv('data/train.csv')

# 将数据类型转换为日期类型
data_train['date'] = pd.to_datetime(data_train['date'])

# 将date设置为index
df = data_train.set_index('date')

# 获取某年的数据
print(df['2010'].head())
# 获取某月的数据
print(df['2013-11'].head())

输出结果:

           id      questions  answers
date                              
2010-10-01   1        742     1561
2010-10-02   2        400      783
2010-10-03   3        388      771
2010-10-04   4        762     1474
2010-10-05   5        821     1639
           id       questions  answers
date                                
2013-11-01  1128       3401     6858
2013-11-02  1129       2626     5467
2013-11-03  1130       2703     5557
2013-11-04  1131       3602     6941
2013-11-05  1132       3741     7312

2、获取某个时期之前或之后的数据

# 获取某个时期之前或之后的数据

# 获取2014年以后的数据
print(df.truncate(before='2014').head())
# 获取2013-11之前的数据
print(df.truncate(after='2013-11').head())
# 获取2016-02年以后的数据
print(df.truncate(before='2016-02').head())
# 获取2016-02-2年以后的数据
print(df.truncate(before='2016-02-2').head())

输出结果:

             id  questions  answers
date                                
2014-01-01  1189       2586     5576
2014-01-02  1190       3541     7175
2014-01-03  1191       3655     7395
2014-01-04  1192       2947     6099
2014-01-05  1193       2847     5935
             id  questions  answers
date                              
2010-10-01   1        742     1561
2010-10-02   2        400      783
2010-10-03   3        388      771
2010-10-04   4        762     1474
2010-10-05   5        821     1639
             id  questions  answers
date                                
2016-02-01  1950       5434    10398
2016-02-02  1951       5650    10795
2016-02-03  1952       5744    10879
2016-02-04  1953       5666    10886
2016-02-05  1954       5371    10508
             id  questions  answers
date                                
2016-02-02  1951       5650    10795
2016-02-03  1952       5744    10879
2016-02-04  1953       5666    10886
2016-02-05  1954       5371    10508
2016-02-06  1955       4296     8800

3、按某个指标显示,但不统计

# 按月显示,但不统计
df_period_M = df.to_period('M').head()
print(df_period_M)
# 按季度显示,但不统计
df_period_Q = df.to_period('Q').head()
print(df_period_Q)
# 按年度显示,但不统计
df_period_A = df.to_period('A').head()
print(df_period_A)

输出结果:

         id  questions  answers
date                           
2010-10   1        742     1561
2010-10   2        400      783
2010-10   3        388      771
2010-10   4        762     1474
2010-10   5        821     1639
         id  questions  answers
date                          
2010Q4   1        742     1561
2010Q4   2        400      783
2010Q4   3        388      771
2010Q4   4        762     1474
2010Q4   5        821     1639
         id  questions  answers
date                        
2010   1        742     1561
2010   2        400      783
2010   3        388      771
2010   4        762     1474
2010   5        821     1639

4、按某个指标显示,并且统计

# 按年统计并显示
print(df.resample('AS').sum().to_period('A'))
# 按季度统计并显示
print(df.resample('Q').sum().to_period('Q').head())
# 按月度统计并显示
print(df.resample('M').sum().to_period('M').head())
# 按月度统计并显示
print(df.resample('W').sum().to_period('W').head())

输出结果:

          id  questions  answers
date                            
2010    4278      74363   153006
2011  100375     535290  1091651
2012  234423     862831  1718434
2013  367190    1179155  2320421
2014  500415    1487677  2876611
2015  633640    1734023  3368264
2016  698810    1808649  3476335
          id  questions  answers
date                             
2010Q4   4278      74363   153006
2011Q1  12375     105858   217767
2011Q2  20748     127873   260836
2011Q3  29394     144424   293853
2011Q4  37858     157135   319195
          id  questions  answers
date                             
2010-10   496      22218    44882
2010-11  1395      25418    52841
2010-12  2387      26727    55283
2011-01  3348      31502    65477
2011-02  3850      33240    67627
           id  questions  answers
date                                          
2010-09-27/2010-10-03    6       1530     3115
2010-10-04/2010-10-10   49       4869     9636
2010-10-11/2010-10-17   98       5079    10344
2010-10-18/2010-10-24  147       5361    10847
2010-10-25/2010-10-31  196       5379    10940

附录:日期类型截图

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ceph对象存储方案

简谈RGW的index shard计算

在RGW里面每个存储到rados的Object都需要先计算出对应元数据存储的shard number,之后再将元数据信息更新到shard number对应的Ob...

2846
来自专栏人人都是极客

环形缓冲区的实现

队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队)。

3264
来自专栏HansBug's Lab

关于使用lazytag的线段树两种查询方式的比较研究

说到线段树,想来大家并不陌生——最基本的思路就是将其规划成块,然后只要每次修改时维护一下即可。 但是尤其是涉及到区间修改时,lazytag的使用往往能够对于程序...

3287
来自专栏DOTNET

ASP.NET MVC编程——模型

1 ViewModel 是一种专门提供给View使用的模型,使用ViewModel的理由是实体或领域模型所包含的属性比View使用的多或少,这种情况下实体或领域...

3348
来自专栏Golang语言社区

c语言客户端与go语言服务端通信(网络字节序)

网络二进制数据转换: 总所周知,数据在tcp网络传输协议中传输的字节序是大端模式的,换句话说如果你要传输一个int32型的整数,那么假设其二进制小端模...

3874
来自专栏小鹏的专栏

windows下C++如何调用matlab程序

实验平台:    matlab R2016b   VS2013 思路: 1. 设置matlab的编译器,使用外部的VC或者gcc等编译器。 2. 编译m文件成d...

2349
来自专栏用户画像

Python 使用正则表达式进行MongoDB条件查询

db.VideoProfile.find( {_id: { $regex: /^1_[0-9]{5,}$/} } ).count()

982
来自专栏linux驱动个人学习

Linux CFS调度器之负荷权重load_weight--Linux进程的管理与调度(二十五)

负荷权重用struct load_weight数据结构来表示, 保存着进程权重值weight。其定义在/include/linux/sched.h, v=4.6...

1281
来自专栏同步博客

memcached分布式缓存

  memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。Memcache集群主机不能够相互通信传输数据,它的“分布式”是基于客户端的...

1331
来自专栏深度学习那些事儿

提升python项目完成效率的调试方法技巧(上)

效率提升是极为重要的事情,我们的时间本来就不充裕,不应该过多将时间浪费在调试过程中。对于大型项目光有dubug是不够的,如果需要提高产品调试进度,必须需要采取一...

4097

扫码关注云+社区

领取腾讯云代金券