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 相关文章推荐
在Django框架中编写Context处理器的方法
Jul 20 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
100行python代码实现跳一跳辅助程序
Jan 15 Python
Python实现简易版的Web服务器(推荐)
Jan 29 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
python leetcode 字符串相乘实例详解
Sep 03 Python
tensorflow实现简单逻辑回归
Sep 07 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
Dec 17 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
python实现二分类和多分类的ROC曲线教程
Jun 15 Python
OpenCV灰度化之后图片为绿色的解决
Dec 01 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
德生1994机评
2021/03/02 无线电
用php或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
Python 面试中 8 个必考问题
2018/11/16 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
大学生自我鉴定
2013/12/08 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
怀念母亲教学反思
2014/04/28 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
村主任群众路线个人对照检查材料
2014/09/26 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python
详解Flask开发技巧之异常处理
2021/06/15 Python
Python的property属性详细讲解
2022/04/11 Python
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
2022/07/15 Java/Android