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 相关文章推荐
Python3中多线程编程的队列运作示例
Apr 16 Python
Python装饰器实现几类验证功能做法实例
May 18 Python
Python批量查询域名是否被注册过
Jun 21 Python
用python处理图片实现图像中的像素访问
May 04 Python
基于anaconda下强大的conda命令介绍
Jun 11 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
Python绘制二维曲线的日常应用详解
Dec 04 Python
tensorflow模型保存、加载之变量重命名实例
Jan 21 Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 Python
使用Python构造hive insert语句说明
Jun 06 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
Aug 14 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+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
checkbox选中与未选中判断示例
2014/08/04 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
7个好用的JavaScript技巧分享(译)
2019/05/07 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
vue实现扫码功能
2020/01/17 Javascript
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
Python内置加密模块用法解析
2019/11/25 Python
py-charm延长试用期限实例
2019/12/22 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
应届医学毕业生求职信分享
2013/12/02 职场文书
配件采购员岗位职责
2013/12/03 职场文书
高分子材料与工程专业个人求职信
2013/12/15 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
计划生育个人总结
2015/03/02 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
话题作文之财富(600字)
2019/12/03 职场文书