Python Pandas读取Excel日期数据的异常处理方法
作者:小小明-代码实体 发布时间:2021-12-10 11:22:55
异常描述
有时我们的Excel有一个调整过自定义格式的日期字段:
当我们用pandas读取时却是这样的效果:
不管如何指定参数都无效。
出现原因
没有使用系统内置的日期单元格格式,自定义格式没有对负数格式进行定义,pandas读取时无法识别出是日期格式,而是读取出单元格实际存储的数值。
解决方案:修改自定义格式
可以修改为系统内置的自定义格式:
或者在自定义格式上补充负数的定义:
增加;@即可
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日 |
总结
来源:https://blog.csdn.net/as604049322/article/details/117919953


猜你喜欢
- exec函数,可以循环定义、赋值多个变量exec ("temp%s=1"%1)这段代码的意思是,让exec执行temp1
- 如下所示:#统计某文件夹下的所有csv文件的行数(多线程)import threadingimport csvimport osclass
- 设计中文网站的朋友都会有这样的体会,Dreamweaver功能虽然强大,但要按照中文的行文习惯实现每个
- 如题:在python的函数调用中需要记录时间,下面是记录毫秒时间的方法。import datetimeimport timet1 = dat
- 一、UPDATE常见用法首先建立测试环境: DROP TABLE IF EXISTS t_test;CREATE TABLE t_
- 在介绍ensure内部的实现之前,让我们先来看看其功能: ensure({ html: "popup.html", ja
- 1、涉及到图的对比会用到子图形式展示先看看效果2、绘制代码如下accuracy_alexnet_clef = [78.05, 78.43,
- 问题: 1. 后台管理员只有一个用户: admin, 密码: admin 2. 当管理员登陆成功后, 可以管理前台会员信
- 本文实例讲述了python数据结构之图的实现方法。分享给大家供大家参考。具体如下:下面简要的介绍下:比如有这么一张图:  
- 有个简单的查看方法,打开记事本,如要查看“Chr("119") w”,可以按下Alt+119 (先按住Alt不放,然后输
- 本文实例讲述了PHP中round()函数对浮点数进行四舍五入的方法。分享给大家供大家参考。具体方法如下:语法:round(x,prec)参数
- 本文实例讲述了Python爬虫爬取杭州24时温度并展示操作。分享给大家供大家参考,具体如下:散点图 爬虫杭州今日24时温度 https://
- 前言:其实很简单!举一个简单的例子!这是一个简单的显示时刻的温度折线图:from matplotlib import pyplot as p
- 前言场景,顾名思义,就是一个情景,一种场面。在yii2中也有场景,这个场景跟你所理解的场景含义差不多。和用户有交互的系统必不可少的功能包括收
- 下面我挑选出的这几个技巧常常会被人们忽略,但它们在日常编程中能真正的给我们带来不少帮助。1. 字典推导(Dictionary compreh
- 写程序经常需要用到从文件或者标准输入中按行读取信息,这里汇总一下。方便使用1. C++ 读取文件#include<stdio
- csv文件CSV文件是最常用的一个文件存储方式。逗号分隔值(Common-Separated Values,CSV)文件以纯文本形式存储表格
- 教育信息化时代,考试成绩也要求上网公布。一次我将考试成绩制作成一个HTML文件,如图1所示,领导审查的意见是“将成绩按名次排列”,可是所有的
- 集合特点:集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键,与列表和元组不同,集合无法通过数字进行索引。此外,集合中的元素不能重复
- keras 模块里面为我们提供了一个预训练好的模型,也就是开箱即可使用的图像识别模型趁着国庆假期有时间我们就来看看这个预训练模型如何使用吧可