excel時間戳轉化為標准日期(日期轉化為日期戳)


最近在學習python將數據導入到excel,發現日期變成數字而不是日期格式的問題。

第一眼看去肯定是excel單元格格式問題,一般excel單元格格式為常規,而常規處理日期時就顯示為數字,所以就想到用一個特定的數字(知道具體日期的),增加一天對應的數字就加1

先看看python直接導入后日期的樣子(下面時我隨機舉例的):

 

 

我們需要日期數據替換成標准的日期格式,具體的思路是:

1、先用excel實驗2019-5-02對應的日期時間戳是43587

 

2、再用2019-5-0243587看是從什么時候開始計算,結論是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中得Timedeltato_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模塊得timedeltadatetime.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') #我這里另存了一份,也可以保存到原文件中

結果圖:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM