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 fileinput模块使用介绍
Nov 30 Python
Python3指定路径寻找符合匹配模式文件
May 22 Python
Python语言实现获取主机名根据端口杀死进程
Mar 31 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
Python网络编程详解
Oct 31 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
Python 一键制作微信好友图片墙的方法
May 16 Python
python 环境搭建 及python-3.4.4的下载和安装过程
Jul 20 Python
python基于socket实现的UDP及TCP通讯功能示例
Nov 01 Python
Python调用.NET库的方法步骤
Dec 27 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
Apr 10 Python
python等待10秒执行下一命令的方法
Jul 19 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
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
javascript中创建对象的三种常用方法
2010/12/30 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python中zip()方法应用实例分析
2016/04/16 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
浅谈Python处理PDF的方法
2017/11/10 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
Python利用matplotlib绘制散点图的新手教程
2020/11/05 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
2014年公司迎新年活动方案
2014/02/24 职场文书
《木笛》教学反思
2014/03/01 职场文书
百年校庆节目主持词
2014/03/27 职场文书
春晚观后感
2015/06/11 职场文书
2015年教师节广播稿
2015/08/19 职场文书
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL