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进阶教程之动态类型详解
Aug 30 Python
Python实现批量下载文件
May 17 Python
全面理解Python中self的用法
Jun 04 Python
Python科学计算之Pandas详解
Jan 15 Python
python日志记录模块实例及改进
Feb 12 Python
python安装cx_Oracle模块常见问题与解决方法
Feb 21 Python
高质量Python代码编写的5个优化技巧
Nov 16 Python
python实现快速排序的示例(二分法思想)
Mar 12 Python
如何使用Python的Requests包实现模拟登陆
Apr 27 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
Python中的pathlib.Path为什么不继承str详解
Jun 23 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添加MySQL数据记录代码
2008/06/07 PHP
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
PHP中Session可能会引起并发问题
2015/06/26 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
python编程实现希尔排序
2017/04/13 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
Django使用rest_framework写出API
2020/05/21 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
行政助理工作职责范本
2014/03/04 职场文书
民事答辩状范本
2015/05/21 职场文书
大学生暑假实习总结
2015/07/13 职场文书
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server