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入门篇之列表和元组
Oct 17 Python
Python中处理unchecked未捕获异常实例
Jan 17 Python
Python文件去除注释的方法
May 25 Python
Python3实现发送QQ邮件功能(附件)
Dec 23 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
tensorflow实现加载mnist数据集
Sep 08 Python
python print出共轭复数的方法详解
Jun 25 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 Python
python学生信息管理系统实现代码
Dec 17 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 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
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
php基础教程 php内置函数实例教程
2012/08/21 PHP
php的dl函数用法实例
2014/11/06 PHP
php统计数组元素个数的方法
2015/07/02 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
2012/09/21 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
vue使用自定义icon图标的方法
2018/05/14 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
react native 仿微信聊天室实例代码
2019/09/17 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
Python语言描述机器学习之Logistic回归算法
2017/12/21 Python
DataFrame中的object转换成float的方法
2018/04/10 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
extern是什么意思
2016/03/10 面试题
大学生求职推荐信
2013/11/27 职场文书
医药工作岗位求职信分享
2013/12/31 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python