Python Pandas读取Excel日期数据的异常处理方法


Posted in Python onFebruary 28, 2022

异常描述

有时我们的Excel有一个调整过自定义格式的日期字段:

Python Pandas读取Excel日期数据的异常处理方法

当我们用pandas读取时却是这样的效果:

Python Pandas读取Excel日期数据的异常处理方法

不管如何指定参数都无效。

出现原因

没有使用系统内置的日期单元格格式,自定义格式没有对负数格式进行定义,pandas读取时无法识别出是日期格式,而是读取出单元格实际存储的数值。

Python Pandas读取Excel日期数据的异常处理方法

解决方案:修改自定义格式

可以修改为系统内置的自定义格式:

Python Pandas读取Excel日期数据的异常处理方法

或者在自定义格式上补充负数的定义:

Python Pandas读取Excel日期数据的异常处理方法

增加;@即可

pandas直接解析Excel数值为日期

有时这种Excel很多,我们需要通过pandas批量读取,挨个人工修改Excel的自定义格式费时费力,下面我演示如何使用pandas直接解析这些数值成为日期格式。

excel中常规格式和日期格式的转换规则如下:

1900/1/1为起始日期,转换的数字是1,往后的每一天增加1

1900/1/2转换为数字是 2

1900/1/3转换为数字是 3

1900/1/4转换为数字是 4

以此类推

excel中时间转换规则如下:

在时间中的规则是把1天转换为数字是 1

每1小时就是 1/24

每1分钟就是 1/(24×60)=1/1440

每1秒钟就是 1/(24×60×60)=1/86400

根据Excel的日期存储规则,我们只需要以1900/1/1为基准日期,根据数值n偏移n-1天即可得到实际日期。不过还有个问题,Excel多存储了1900年2月29日这一天,而正常的日历是没有这一天的,而我们的日期又都是大于1900年的,所以应该偏移n-2天,干脆使用1899年12月30日作为基准,这样不需要作减法操作。

解析代码如下:

import pandas as pd
from pandas.tseries.offsets import Day

df = pd.read_excel("日期.xlsx")
basetime = pd.to_datetime("1899/12/30")
df.日期 = df.日期.apply(lambda x: basetime+Day(x))
df.日期 = df.日期.apply(lambda x: f"{x.month}月{x.day}日")
df.head()
  日期
0 6月8日
1 6月9日
2 6月10日
3 6月11日
4 6月12日

如果需要调用time的strftime方法,由于包含中文则需要设置locale:

import pandas as pd
from pandas.tseries.offsets import Day
import locale
locale.setlocale(locale.LC_CTYPE, 'chinese')

df = pd.read_excel("日期.xlsx")
basetime = pd.to_datetime("1899/12/30")
df.日期 = df.日期.apply(lambda x: basetime+Day(x))
df.日期 = df.日期.dt.strftime('%Y年%m月%d日')
df.head()
  日期
0 2021年06月08日
1 2021年06月09日
2 2021年06月10日
3 2021年06月11日
4 2021年06月12日

总结 

到此这篇关于Python Pandas读取Excel日期数据的异常处理的文章就介绍到这了,更多相关Pandas读取Excel日期数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
Python图像灰度变换及图像数组操作
Jan 27 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
Sep 19 Python
Python网络爬虫项目:内容提取器的定义
Oct 25 Python
python并发编程之多进程、多线程、异步和协程详解
Oct 28 Python
OpenCV实现人脸识别
Apr 07 Python
Python网络编程详解
Oct 31 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
由Python编写的MySQL管理工具代码实例
Apr 09 Python
基于Python执行dos命令并获取输出的结果
Dec 30 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
python基础之错误和异常处理
Oct 24 Python
pytorch中的torch.nn.Conv2d()函数图文详解
Feb 28 #Python
python3中apply函数和lambda函数的使用详解
Feb 28 #Python
你需要掌握的20个Python常用技巧
Feb 28 #Python
python opencv将多个图放在一个窗口的实例详解
pandas中关于apply+lambda的应用
Feb 28 #Python
Python中的datetime包与time包包和模块详情
Feb 28 #Python
Python 数据可视化神器Pyecharts绘制图像练习
You might like
php getsiteurl()函数
2009/09/05 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
理解 JavaScript Scoping & Hoisting(二)
2015/11/18 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
jQuery中复合选择器简单用法示例
2018/03/31 jQuery
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
Python记录详细调用堆栈日志的方法
2015/05/05 Python
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
python妹子图简单爬虫实例
2015/07/07 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
Django model序列化为json的方法示例
2018/10/16 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
钳工实习自我鉴定
2013/09/19 职场文书
面试后感谢信怎么写
2014/02/01 职场文书
理想演讲稿范文
2014/05/21 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
中学生学习保证书
2015/02/26 职场文书
英语教师求职信范文
2015/03/20 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
实验心得体会范文
2016/01/25 职场文书