pandas 日期比较大小_pandas处理日期时间,按照时间筛选

pandas有着强大的日期数据处理功能,本期我们来了解下pandas处理日期数据的一些基本功能,主要包括以下三个方面:

按日期筛选数据

按日期显示数据

按日期统计数据

运行环境为 windows系统,64位,python3.5。

1 读取并整理数据

首先引入pandas库

import pandas as pd

从csv文件中读取数据

df = pd.read_csv('date.csv', header=None)

print(df.head(2))

0 1

0 2013-10-24 3

1 2013-10-25 4

整理数据

df.columns = ['date','number']

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

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

print(df.head(2))

print(df.tail(2))

print(df.shape)

number

date

2013-10-24 3

2013-10-25 4

number

date

2017-02-14 6

2017-02-22 6

(425, 1)

df的行数一共是425行。

查看Dataframe的数据类型

print(type(df))

print(df.index)

print(type(df.index))

DatetimeIndex(['2013-10-24', '2013-10-25', '2013-10-29', '2013-10-30',

'2013-11-04', '2013-11-06', '2013-11-08', '2013-11-12',

'2013-11-14', '2013-11-25',

...

'2017-01-03', '2017-01-07', '2017-01-14', '2017-01-17',

'2017-01-23', '2017-01-25', '2017-01-26', '2017-02-07',

'2017-02-14', '2017-02-22'],

dtype='datetime64[ns]', name='date', length=425, freq=None)

构造Series类型数据

s = pd.Series(df['number'], index=df.index)

print(type(s))

s.head(2)

date

2013-10-24 3

2013-10-25 4

Name: number, dtype: int64

2 按日期筛选数据

按年度获取数据

print('---------获取2013年的数据-----------')

print(df['2013'].head(2)) # 获取2013年的数据

print(df['2013'].tail(2)) # 获取2013年的数据

---------获取2013年的数据-----------

number

date

2013-10-24 3

2013-10-25 4

number

date

2013-12-27 2

2013-12-30 2

获取2016至2017年的数据

print('---------获取2016至2017年的数据-----------')

print(df['2016':'2017'].head(2)) #获取2016至2017年的数据

print(df['2016':'2017'].tail(2)) #获取2016至2017年的数据

---------获取2016至2017年的数据-----------

number

date

2016-01-04 4

2016-01-07 6

number

date

2017-02-14 6

2017-02-22 6

获取某月的数据

print('---------获取某月的数据-----------')

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

---------获取某月的数据-----------

number

date

2013-11-04 1

2013-11-06 3

2013-11-08 1

2013-11-12 5

2013-11-14 2

2013-11-25 1

2013-11-29 1

获取具体某天的数据

请注意dataframe类型的数据,获取具体某天的数据时,跟series是有些差异的,详细情况如下述代码所示:

# 按日期筛选数据

print('---------获取具体某天的数据-----------')

# 获取具体某天的数据

print(s['2013-11-06'])

# 获取具体某天的数据,用datafrme直接选取某天时会报错,而series的数据就没有问题

# print(df['2013-11-06'])

#可以考虑用区间来获取某天的数据

print(df['2013-11-06':'2013-11-06'])

---------获取具体某天的数据-----------

3

number

date

2013-11-06 3

dataframe的truncate函数可以获取某个时期之前或之后的数据,或者某个时间区间的数据

但一般建议直接用切片(slice),这样更为直观,方便

# dataframe的truncate函数可以获取某个时期之前或之后的数据,或者某个时间区间的数据

# 但一般建议直接用切片(slice),这样更为直观,方便

print('---------获取某个时期之前或之后的数据-----------')

print('--------after------------')

print(df.truncate(after = '2013-11'))

print('--------before------------')

print(df.truncate(before='2017-02'))

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

--------after------------

number

date

2013-10-24 3

2013-10-25 4

2013-10-29 2

2013-10-30 1

--------before------------

number

date

2017-02-07 8

2017-02-14 6

2017-02-22 6

3 按日期显示数据

3.1 to_period()方法

请注意df.index的数据类型是DatetimeIndex;

df_peirod的数据类型是PeriodIndex

按月显示,但不统计

df_period = df.to_period('M') #按月显示,但不统计

print(type(df_period))

print(type(df_period.index))

# 请注意df.index的数据类型是DatetimeIndex;

# df_peirod的数据类型是PeriodIndex

print(df_period.head())

number

date

2013-10 3

2013-10 4

2013-10 2

2013-10 1

2013-11 1

按季度显示,但不统计

print(df.to_period('Q').head()) #按季度显示,但不统计

number

date

2013Q4 3

2013Q4 4

2013Q4 2

2013Q4 1

2013Q4 1

按年度显示,但不统计

print(df.to_period('A').head()) #按年度显示,但不统计

number

date

2013 3

2013 4

2013 2

2013 1

2013 1

3.2 asfreq()方法

按年度频率显示

df_period.index.asfreq('A') # 'A'默认是'A-DEC',其他如'A-JAN'

PeriodIndex(['2013', '2013', '2013', '2013', '2013', '2013', '2013', '2013',

'2013', '2013',

...

'2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017',

'2017', '2017'],

dtype='period[A-DEC]', name='date', length=425, freq='A-DEC')

df_period.index.asfreq('A-JAN') # 'A'默认是'A-DEC',其他如'A-JAN'

PeriodIndex(['2014', '2014', '2014', '2014', '2014', '2014', '2014', '2014',

'2014', '2014',

...

'2017', '2017', '2017', '2017', '2017', '2017', '2017', '2018',

'2018', '2018'],

dtype='period[A-JAN]', name='date', length=425, freq='A-JAN')

按年度频率在不同情形下的显示,可参考下图所示:

按季度频率显示

df_period.index.asfreq('Q') # 'Q'默认是'Q-DEC',其他如“Q-SEP”,“Q-FEB”

PeriodIndex(['2013Q4', '2013Q4', '2013Q4', '2013Q4', '2013Q4', '2013Q4',

'2013Q4', '2013Q4', '2013Q4', '2013Q4',

...

'2017Q1', '2017Q1', '2017Q1', '2017Q1', '2017Q1', '2017Q1',

'2017Q1', '2017Q1', '2017Q1', '2017Q1'],

dtype='period[Q-DEC]', name='date', length=425, freq='Q-DEC')

df_period.index.asfreq('Q-SEP') # 可以显示不同的季度财年,“Q-SEP”,“Q-FEB”

# df_period.index = df_period.index.asfreq('Q-DEC') # 可以显示不同的季度财年,“Q-SEP”,“Q-FEB”

# print(df_period.head())

PeriodIndex(['2014Q1', '2014Q1', '2014Q1', '2014Q1', '2014Q1', '2014Q1',

'2014Q1', '2014Q1', '2014Q1', '2014Q1',

...

'2017Q2', '2017Q2', '2017Q2', '2017Q2', '2017Q2', '2017Q2',

'2017Q2', '2017Q2', '2017Q2', '2017Q2'],

dtype='period[Q-SEP]', name='date', length=425, freq='Q-SEP')

按季度频率在不同情形下的显示,可参考下图所示:

按月度频率显示

df_period.index.asfreq('M') # 按月份显示

PeriodIndex(['2013-10', '2013-10', '2013-10', '2013-10', '2013-11', '2013-11',

'2013-11', '2013-11', '2013-11', '2013-11',

...

'2017-01', '2017-01', '2017-01', '2017-01', '2017-01', '2017-01',

'2017-01', '2017-02', '2017-02', '2017-02'],

dtype='period[M]', name='date', length=425, freq='M')

按工作日显示

method 1

df_period.index.asfreq('B', how='start') # 按工作日期显示

PeriodIndex(['2013-10-01', '2013-10-01', '2013-10-01', '2013-10-01',

'2013-11-01', '2013-11-01', '2013-11-01', '2013-11-01',

'2013-11-01', '2013-11-01',

...

'2017-01-02', '2017-01-02', '2017-01-02', '2017-01-02',

'2017-01-02', '2017-01-02', '2017-01-02', '2017-02-01',

'2017-02-01', '2017-02-01'],

dtype='period[B]', name='date', length=425, freq='B')

method 2

df_period.index.asfreq('B', how='end') # 按工作日期显示

PeriodIndex(['2013-10-31', '2013-10-31', '2013-10-31', '2013-10-31',

'2013-11-29', '2013-11-29', '2013-11-29', '2013-11-29',

'2013-11-29', '2013-11-29',

...

'2017-01-31', '2017-01-31', '2017-01-31', '2017-01-31',

'2017-01-31', '2017-01-31', '2017-01-31', '2017-02-28',

'2017-02-28', '2017-02-28'],

dtype='period[B]', name='date', length=425, freq='B')

4 按日期统计数据

4.1按日期统计数据

按周统计数据

print(df.resample('w').sum().head())

# “w”,week

number

date

2013-10-27 7.0

2013-11-03 3.0

2013-11-10 5.0

2013-11-17 7.0

2013-11-24 NaN

按月统计数据

print(df.resample('M').sum().head())

# "MS"是每个月第一天为开始日期, "M"是每个月最后一天

number

date

2013-10-31 10

2013-11-30 14

2013-12-31 27

2014-01-31 16

2014-02-28 4

按季度统计数据

print(df.resample('Q').sum().head())

# "QS"是每个季度第一天为开始日期, "Q"是每个季度最后一天

number

date

2013-12-31 51

2014-03-31 73

2014-06-30 96

2014-09-30 136

2014-12-31 148

按年统计数据

print(df.resample('AS').sum())

# "AS"是每年第一天为开始日期, "A是每年最后一天

number

date

2013-01-01 51

2014-01-01 453

2015-01-01 743

2016-01-01 1552

2017-01-01 92

关于日期的类型,按参考下图所示来选择合适的分期频率:

4.2 按日期统计后,按年或季度或月份显示

按年统计并显示

print(df.resample('AS').sum().to_period('A'))

# 按年统计并显示

number

date

2013 51

2014 453

2015 743

2016 1552

2017 92

按季度统计并显示

print(df.resample('Q').sum().to_period('Q').head())

# 按季度统计并显示

number

date

2013Q4 51

2014Q1 73

2014Q2 96

2014Q3 136

2014Q4 148

按月度统计并显示

print(df.resample('M').sum().to_period('M').head())

# 按月度统计并显示

number

date

2013-10 10

2013-11 14

2013-12 27

2014-01 16

2014-02 4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中符号输入_Python基础(输入、运算符)

输入 1. python2版本中 1.1 使用 raw_input()函数, 看如下示例: password raw_input("请输入密码:") print (您刚刚输入的密码是:%s, % password) 运行结果:注意: raw_input()的小括号中放入的是,提示信息,…

c语言课程教学改革,C语言课程教学改革和实践.doc

C语言课程教学改革和实践C语言课程教学改革和实践程序设计课程在计算机科学(Computer Science, CS)专业新生的教学中起着相当基础的作用,CS专业包括计算机科学与技术、软件工程和网络工程。尽管近年来涌现了很多新的程序设计语言,如java&…

audio接线图解_图文:主板跳线(排线)连接技巧HD AUDIO连线接法

作为一名新手,要真正从头组装好自己的电脑并不容易,也许你知道CPU应该插哪儿,内存应该插哪儿,但遇到一排排复杂跳线的时候,很多新手都不知道如何下手。钥匙开机其实并不神秘还记不记得你次见到装电脑的时候&#xff0c…

code blocks c语言,Code Blocks安装与使用图文教程(使用Code::Blocks编写C语言程序)...

CodeBlocks 完全支持单个源文件的编译,如果你的程序只有一个源文件(初学者基本上都是在单个源文件下编写代码),那么不用创建项目,直接运行即可;如果有多个源文件,才需要创建项目。1) 新建源文件打开 CodeBlocks &#…

python链表实现栈_python实现链表队列栈

#!/usr/bin/python # -*- coding: utf-8 -*- #便于测试 data 使用数字 class Node(object): def __init__(self,data): self.data data self.next None self.prev None class List(object): def __init__(self): self.next self self.prev self self.size 0 # 是否为空 d…

python except用法和作用_Python面试题(部分附带面试标准答案) 建议收藏

1、请尽可能列举python列表的成员方法,并给出一下列表操作的答案:(1) a[1, 2, 3, 4, 5], a[::2]?, a[-2:] ?(2) 一行代码实现对列表a中的偶数位置的元素进行加3后求和?(3&#xf…

c语言简单的24点游戏,C语言解24点游戏程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼前几天在微博上看到24点的游戏,6 6 610。算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的所有可能的表达式组合&…

chrome vue插件_VS Code 前端常用插件推荐

⊕.vscode安装插件只需要点击图片所示按钮,即可进入拓展,在搜索框中输入插件名点击安装后,等待安装好即可点击重新加载重启vscode使得插件生效。Ξ.当你不需要某个插件时只需要进入扩展,点击对应插件右下角的齿轮按钮即可选择禁用…

ubantu获取信息_Ubuntu 下查看CPU 信息命令

查看当前操作系统内核信息uname -aLinux redcat 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 05:23:09 UTC 2010 i686 GNU/Linux查看当前操作系统发行版信息cat /etc/issueUbuntu 9.10 /n /l查看cpu型号cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c2 Intel(R) Cor…

为什么c语言读文件少内容,这个程序为什么在读文件时候读不全数据?

已结贴√问题点数:10 回复次数:7这个程序为什么在读文件时候读不全数据?txt(数据):4700.7100 -16.801 73.331 115.494 37.617 11414.634 1.009 8.802 9.738 9.444 15.011 10.455 20.906 …

@mapperscan注解_Spring的@Import注解详解

首先看下Import的javadoc文档&#xff1a;Provides functionality equivalent to the <import/> element in Spring XML. Allows for importing Configuration classes, ImportSelector and ImportBeanDefinitionRegistrar implementations, as well as regular componen…

httphost设置socks_socks5代理使用和安装配置

Socks简介&#xff1a;详情可以百度&#xff0c;不过我猜你对那一大堆术语也会像我一样觉得无语&#xff0c;所以我觉得你可以简单理解为它可以比较完美代理http/ftp/smtp等多种协议的代理工具就行了。其中最具有典型例子的就是QQ的登录、foxmail的邮件、火狐的网页浏览都可以直…

百合数c语言360问答,《百合花》

满意答案fadess1d2013.02.26采纳率&#xff1a;51% 等级&#xff1a;12已帮助&#xff1a;7212人作者茹志娟&#xff0c;于1958年3月在《延安》上面发表。这篇小说具有清新俊逸的艺术风格。是她前期的代表作。她写这篇小说时&#xff0c;中那个是反右斗争扩大化&#xff0c;…

python 实现显著性检测_使用python轻松实现高大上的YOLOV4对象检测算法

YOLO系列对象检测算法&#xff0c;算是人工智能技术领域的一匹黑马&#xff0c;当开发者宣布不再为YOLO系列检测算法更新时&#xff0c;很多开发者瞬间失去了”精神食粮“。突然&#xff0c;当YOLOV4检测算法发布的时候&#xff0c;让很多开发者喜出望外。YOLOV4对象检测YOLOV4…

reactnative 获取定位_【React Native】定位获取经纬度,当前城市等地址信息

最近做React Native时&#xff0c;需要用到城市定位的功能&#xff0c;React Native中文网的定位部分中也提供了相应的方法。主要用到的方法有&#xff1a;这里只需要获取到经纬度&#xff0c;城市等信息&#xff0c;持续监听的函数就不需要了。这里使用 getCurrentPosition 方…

linux hash 算法,识别哈希算法类型hash-identifier

识别哈希算法类型hash-identifier是一款哈希算法识别工具。通过该工具&#xff0c;用户可以识别哈希值所使用的哈希算法。确定算法后&#xff0c;就可以采用对应的工具进行xx。执行该命令如下所示&#xff1a;rootdaxueba:~# hash-identifier输出信息如下所示&#xff1a;#####…

calendar获取本周一的日期_Java Calendar 获取本周周一和周日代码

Java Calendar 获取本周周一和周日代码/*** 得到本周周一** return yyyy-MM-dd*/public static String getMondayOfThisWeek() {Calendar c Calendar.getInstance();int day_of_week c.get(Calendar.DAY_OF_WEEK) - 1;if (day_of_week 0)day_of_week 7;c.add(Calendar.DATE…

android source镜像源_【转载】Celadon快速上路指南Part2:编译Celadon镜像

Celadon快速上路指南Part2&#xff1a;编译Celadon镜像From: 孙晓璐 AndroidIA Celadon 9/20一目了然 | Celadon 新手上路快速通道隆重揭晓 | 打开Celadon 的正确姿势上一期我们向您介绍了如何安装Celadon预编译镜像&#xff08;Celadon快速上路指南 Part1&#xff1a;安装Cela…

光学字符识别 android,基于Android的光学字符识别研究与实现

摘要&#xff1a;随着Android手机平台的普及和信息化进程的不断推进,利用手持设备高效地将文档信息录入已经成为一个亟需解决的问题,其关键技术光学字符识别在手机上的应用日益受到人们重视.本文所做工作正是针对这一问题而展开.本文设计的Android平台光学字符识别通过手机摄像…

适合程序员的耳机_为什么很多程序员工作时都戴耳机?

观点一&#xff1a;非诚勿扰&#xff0c;想静静。1、啥也没听&#xff0c;只是带着耳机而已。只是想告诉别人不要打扰我&#xff0c;选择性屏蔽一些讨厌的人说的话&#xff0c;不回答他。2、在听笑话或者有声小说。特别不想工作的时候会很认真地听&#xff0c;如果进入工作状态…