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代码检查工具pylint 让你的python更规范
Sep 05 Python
python判断给定的字符串是否是有效日期的方法
May 13 Python
python实现发送邮件功能
Jul 22 Python
Python生成短uuid的方法实例详解
May 29 Python
tensorflow实现加载mnist数据集
Sep 08 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 Python
OpenCV+python实现实时目标检测功能
Jun 24 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
python自然语言处理之字典树知识总结
Apr 25 Python
Python词云的正确实现方法实例
May 08 Python
Python合并多张图片成PDF
Jun 09 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/10/09 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
JavaScript的变量作用域深入理解
2009/10/25 Javascript
javascript cookies操作集合
2010/04/12 Javascript
基于Jquery的温度计动画效果
2010/06/18 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
vue-cli如何引入bootstrap工具的方法
2017/10/19 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
taro开发微信小程序的实践
2019/05/21 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
对python requests发送json格式数据的实例详解
2018/12/19 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
详解Python 重学requests发起请求的基本方式
2020/02/07 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
Python可以用来做什么
2020/11/23 Python
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
北京银河万佳Java面试题
2012/03/21 面试题
信访工作者先进事迹
2014/01/17 职场文书
西安交大自主招生自荐信
2014/01/27 职场文书
投标诚信承诺书
2014/05/26 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
个人党性分析材料
2014/12/19 职场文书
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs