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中的元祖(Tuple)和字典(Dict)
Apr 21 Python
利用Celery实现Django博客PV统计功能详解
May 08 Python
Python3.6安装及引入Requests库的实现方法
Jan 24 Python
python在文本开头插入一行的实例
May 02 Python
python 接收处理外带的参数方法
Dec 03 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
Feb 15 Python
python 多线程重启方法
Feb 18 Python
java中的控制结构(if,循环)详解
Jun 26 Python
python取均匀不重复的随机数方式
Nov 27 Python
Python生成个性签名图片获取GUI过程解析
Dec 16 Python
python设置代理和添加镜像源的方法
Feb 14 Python
python线程池 ThreadPoolExecutor 的用法示例
Oct 10 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
第四节--构造函数和析构函数
2006/11/16 PHP
php网页后退不再出现过期
2007/03/08 PHP
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
关于crontab的使用详解
2013/06/24 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
Javascript hasOwnProperty 方法 & in 关键字
2008/11/26 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
python实现媒体播放器功能
2018/02/11 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
Python当中的array数组对象实例详解
2019/06/12 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
Python生成器实现简单"生产者消费者"模型代码实例
2020/03/27 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
keras的三种模型实现与区别说明
2020/07/03 Python
python反扒机制的5种解决方法
2021/02/06 Python
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
什么是事务?事务有哪些性质?
2012/03/11 面试题
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
英语专业学生个人求职信范文
2014/01/06 职场文书
我的画教学反思
2014/04/28 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书