
我最近在学习python将数据导入excel的过程,发现日期变成了数字而不是日期格式。
乍看之下,excel单元格的格式肯定是有问题的。通常,excel单元格的格式是常规格式,但是当常规处理日期时,它会显示为数字,因此我想到使用特定数字(知道特定日期),然后添加1。
让我们看一下直接导入python之后的日期是什么样的(我将在下面提供一个随机示例):


我们需要用标准日期格式替换日期数据。具体想法是:
1、使用excel进行的第一个实验。与2019-5-02相对应的日期和时间戳是43587。


2、使用2019-5-02减去43587来查看计算何时开始。结论是1899-12-30。
import pandas as pd
pd.to_datetime('2019-05-02')-pd.Timedelta('43587D') #D表示天 #Timestamp('1899-12-30 00:00:00')

3、然后将最后一个时间戳转换为日期:您只需要当前时间戳+ 1899-12-30
批量转换(定义转换日期戳的功能,日期是日期戳)
方法1:使用pd获取Timedelta和to_datetime

import pandas as pd def date(stamp): #这个有个弊端,输入得时间戳过大后报错,最大支持多少106751 delta = pd.Timedelta(str(stamp)+'D') real_time = pd.to_datetime('1899-12-30') + delta return real_time
方法2:使用datetime模块获取timedelta datetime.strptime
import datetime def date(dates): delta=datetime.timedelta(days=dates) today=datetime.datetime.strptime('1899-12-30','%Y-%m-%d')+delta #将1899-12-30转化为可以计算的时间格式并加上要转化的日期戳 return datetime.datetime.strftime(today,'%Y-%m-%d')#制定输出日期的格式
以下代码是将excel时间戳转换为标准日期并替换原始列名的具体步骤:
import openpyxl import datetime data = openpyxl.load_workbook(r'E:\work_hot\temp\docx\time_test.xlsx') def date(dates): delta=datetime.timedelta(days=dates) today=datetime.datetime.strptime('1899-12-30','%Y-%m-%d')+delta return datetime.datetime.strftime(today,'%Y/%m/%d') list1 = [] for i in data['Sheet1'].columns: list1.append([])
for row in data['Sheet1'].values: for x in range(len(row)): realtime = date(row[x]) #转化为具体时间,调用date方法 list1[x].append(realtime) continue #遍历表格中的数据,将原值改为真实日期 i = 0 for row in data['Sheet1'].columns: for j in range(len(list1[i])): row[j].value = list1[i][j] i += 1 data.save(r'E:\work_hot\temp\docx\time_test1234.xlsx') #我这里另存了一份,也可以保存到原文件中
结果图:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-317960-1.html
我们可不可以把质监局这种做错事不道歉
刚好送别
我们私下聊
中国