最近在學習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
批量轉化(定義轉化日期戳的函數,dates為日期戳)
方法一:用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
方法二:用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') #我這里另存了一份,也可以保存到原文件中
結果圖: