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随机生成彩票号码的方法
Mar 05 Python
python写入xml文件的方法
May 08 Python
Python探索之pLSA实现代码
Oct 25 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
Jan 15 Python
Python实现对文件进行单词划分并去重排序操作示例
Jul 10 Python
python实现简单http服务器功能
Sep 17 Python
浅析Python3 pip换源问题
Jan 06 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 Python
如何解决python多种版本冲突问题
Oct 13 Python
Ubuntu20下的Django安装的方法步骤
Jan 24 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 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学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
php操作mysql数据库的基本类代码
2014/02/25 PHP
php中的ini配置原理详解
2014/10/14 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
php之static静态属性与静态方法实例分析
2015/07/30 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
Div Select挡住的解决办法
2008/08/07 Javascript
js 覆盖和重载 函数
2009/09/25 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
2013/09/18 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
[04:22]DOTA2上海特级锦标赛主赛事第四日TOP10
2016/03/06 DOTA
详解Python中for循环是如何工作的
2017/06/30 Python
python学习入门细节知识点
2018/03/29 Python
python处理csv中的空值方法
2018/06/22 Python
python操作redis数据库的三种方法
2020/09/10 Python
文言文形式的学生求职信
2013/12/03 职场文书
学校安全责任书范本
2014/07/23 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
开学第一周总结
2015/07/16 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
python3 hdf5文件 遍历代码
2021/05/19 Python