pandas的to_datetime时间转换使用及学习心得


Posted in Python onAugust 11, 2019

前言

昨天在网赛中做了一道题,虽然是外国人的Englis题目,但是内容很有学习的价值,值得仔细的学习,今天就把我所收获的一部分记录下来。其一:做个学习的资料记录。其二:分享出来,供大家参考。

(收获了对处理大数据的又一次认识!!!)

这是一道将DataFrame的日期数据转换为python能认识的题目。这里重点讲一下to_datetime的部分使用。

首先说一下:

  • 1/17/07 has the format "%m/%d/%y"
  • 17-1-2007 has the format "%d-%m-%Y"

这是一部分的时间转换格式,通过以上的格式,你可以将DataFrame中的时间格式转换为以下等python格式:

0 2007-03-02
1 2007-03-22
2 2007-04-06
3 2007-04-14
4 2007-04-15
Name: date_parsed, dtype: datetime64[ns]

看见没有dtype:datetime64,这是转换过后的形式,其实你可以将原数据使用dtype查看列,来看它的格式。你会发现它是object形式的。这里说一下。这个object格式一般是python用来记录可变化的兑现的格式。这个格式它并不能认出是时间格式,尽管我们一眼就能看出(人和机器的区别在此)。

data = pd.read_csv('path') #这里我们得到data数据
data['date'].heade() #查看一下日期列的样子
0 01/02/1965
1 01/04/1965
2 01/05/1965
3 01/08/1965
4 01/09/1965
Name: Date, dtype: object

可以看出它为object格式,并非日期格式。

data['date_parsed'] = pd.to_datetime(data['date'],format="%m/%d/%y")

上面为 我们按python格式转换时间,并添加到新的一列中去。

dara['date_parsed'].head()  #查看一下结果
0  1965-01-02
1  1965-01-04
2  1965-01-05
3  1965-01-08
4  1965-01-09
 
Name: data_parsed, dtype: datetime64[ns]

可以看到不论形式还是类型都改变了,当然这只是一点皮毛,如果只是这里点,这个博客意义不大

其实在使用上面语句转换时间是,并不是这么顺利:

/opt/conda/lib/python3.6/site-packages/pandas/core/tools/datetimes.py in _convert_listlike(arg, box, format, name, tz)
  271           try:
  272             result = array_strptime(arg, format, exact=exact,
--> 273                         errors=errors)
  274           except tslib.OutOfBoundsDatetime:
  275             if errors == 'raise':
 
pandas/_libs/tslibs/strptime.pyx in pandas._libs.tslibs.strptime.array_strptime()
 
ValueError: time data '1975-02-23T02:58:41.000Z' does not match format '%m/%d/%Y' (match)

一部分错误信息如上。

面对加载都要加载半天的数据出了错误,你真的是无助的,如果要去看数据怕是要看一天。

当然有人会说不是有错误信息吗?当然我知道,但是一但当信息量大了以后,当时是茫然的。花了半天查找其他时间的转换方式。无果。于是静下心来发现问题。可以看出它说有一下格式不能转换。

'1975-02-23T02:58:41.000Z'

所以我又换了一种格式将时分秒都匹配了,又提醒年月日不匹配。反复的验证后发现应该是原数据有问题,部分时间并不是同意的格式。哈哈发现问题了,我们可以修改了。

我第一次的修改方式为:

data['over_long'] = data['Date'].apply(len)  #添加一列记录没行时间的长度
data.loc[data['over_long'] > 10]  #输出大于正常数据的行  这里会发现缺失有那么几行在作怪!!!
normal_dates = data.loc[data['over_long'] < 11]  #筛选出正常数据
normal_dates = normal_dates.copy()    #拷贝
normal_dates['data_parsed'] = pd.to_datetime(normal_dates['Date'],format='%m/%d/%Y')  #再次转换时间,发现没有报错了 哈哈
normal_dates['data_parsed'].head(10)  #输出查看没问题的

以上是我的第一次解决方法。

后续在别人的指导下了解了其他的几种更好的方法。(毕竟我删除数据的方式不好)

第一种和第二种:

data['date_parsed'] = pd.to_datetime(data['Date'], format = "%m/%d/%Y", errors = 'coerce')
data['date_parsed'] = pd.to_datetime(data['Date'],infer_datetime_format=True)

两个都能实现我试了一下。毕竟对to_datetime不太熟悉所以犯了错。

OK!全部完成了。但是我想说的以上都不是最重要的。

最重要的是一种经验的掌握。当你面对大量的数据时千万不要紧张,它们也是小数据构成的,只要冷静下来,你就能想到方法来解决。这才是我想说的!!!与君共勉。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python笔记(叁)继续学习
Oct 24 Python
Python中利用原始套接字进行网络编程的示例
May 04 Python
Python中利用xpath解析HTML的方法
May 14 Python
Django中反向生成models.py的实例讲解
May 30 Python
python 读取文本文件的行数据,文件.splitlines()的方法
Jul 12 Python
在python中实现强制关闭线程的示例
Jan 22 Python
如何在Python中实现goto语句的方法
May 18 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
keras实现调用自己训练的模型,并去掉全连接层
Jun 09 Python
python 模拟登录B站的示例代码
Dec 15 Python
对象析构函数__del__在Python中何时使用
Mar 22 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 #Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 #Python
python3实现带多张图片、附件的邮件发送
Aug 10 #Python
python实现邮件自动发送
Aug 10 #Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 #Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 #Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 #Python
You might like
php防盗链的常用方法小结
2010/07/02 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
php将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
php格式化电话号码的方法
2015/04/24 PHP
Javascript 中的类和闭包
2010/01/08 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
Python中实现参数类型检查的简单方法
2015/04/21 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
实习期自我鉴定
2013/10/11 职场文书
在校生自我鉴定
2014/01/23 职场文书
医院检讨书范文
2014/02/01 职场文书
冰淇淋店的创业计划书
2014/02/07 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
颁奖典礼主持词
2014/03/25 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python