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分割和拼接字符串
Nov 01 Python
Python开发实例分享bt种子爬虫程序和种子解析
May 21 Python
python多重继承新算法C3介绍
Sep 28 Python
详解python之简单主机批量管理工具
Jan 27 Python
python 删除列表里所有空格项的方法总结
Apr 18 Python
Python实现的多进程和多线程功能示例
May 29 Python
python爬虫添加请求头代码实例
Dec 28 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
Django用户登录与注册系统的实现示例
Jun 03 Python
Python编写单元测试代码实例
Sep 10 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 Python
基于PyTorch中view的用法说明
Mar 03 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 array_search() 函数使用
2010/04/13 PHP
php之readdir函数用法实例
2014/11/13 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
php排序算法实例分析
2016/10/17 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
CSS常用网站布局实例
2008/04/03 Javascript
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
Vue3 实现双盒子定位Overlay的示例
2020/12/22 Vue.js
python中的列表推导浅析
2014/04/26 Python
简单谈谈python中的Queue与多进程
2016/08/25 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
python 录制系统声音的示例
2020/12/21 Python
英语硕士生求职简历的自我评价
2013/10/15 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
检讨书范文500字
2015/01/28 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
小学运动会入场口号
2015/12/24 职场文书
一年级下册数学教学反思
2016/02/16 职场文书