如何在Python中将日期格式从Excel数字转换为日期时间格式

nc1teljy  于 2023-08-02  发布在  Python
关注(0)|答案(1)|浏览(140)

我正在加载OpenPyxl中dashboard导出的excel(xlsx)文件,部分日期值默认为44774.375,需要转换为01-08-2022 09:00:00才能加载到SF表中。
此外,在 Jmeter 板中,用户给出4/21/2023 10:00:00 PM此格式,但我应该转换为21-04-2023 10:00:00
不确定如何在列FE RETA、RETA中应用这两个格式条件。
我现在正在使用下面的代码

import pandas as pd
from openpyxl import load_workbook

wb = load_workbook(filename= "file.xlsx", data_only = True)
sheet_names = wb.get_sheet_names()
name = sheet_names[0]
sheet_ranges = wb[name]
df = pd.DataFrame(sheet_ranges.values, index = none)
print(df)

#To replace (4/21/2023 10:00:00 PM) format to (21-04-2023 10:00:00)
df['FE RETA'] = pd.to_datetime(df['FE RETA'], format = '%m/%d/%Y %I:%M:%S %p', errors='coerce')
df['FE RETA'] =df['FE RETA'].dt.strftime('%d-%m-%Y %H:%m:%S')

#To replace all remaining number format to (21-04-2023 10:00:00) 
#but its only working if the entire column is in number format
df['FE RETA'] = pd.to_datetime(df['FE RETA'],unit='d') + dt.datetime(1899,12,30)
print(df)

字符串
但是我的日期列也有正确的日期时间格式值。所以它把我的错误。
TypeError:时间增量标量的类型无效:<class 'datetime. datetime'>
源文件:

Tht|       FE RETA               |  RETA                | TPM SLACycletime
---------------------------------------------------------------------------
US |    4/21/2023 10:00:00 PM    |4/21/2023 10:30:00 AM | Invalid Data
US |    4/22/2023 11:45:00 PM    |44781.54167           | 558:19:30
US |    4/21/2023 10:30:00 AM    |10-09-2022 18:03:00   | 111:44:26
US |    01-08-2022 10:00:00      |44778.41667           | 15:44:26
US |    44774.375                |44775.52083           | Invalid Data


预期输出:

Tht|       FE RETA               |  RETA                | TPM SLACycletime
---------------------------------------------------------------------------
US |    21-04-2023 10:00:00      |21-04-2023 10:30:00   | Invalid Data
US |    22-04-2023 11:45:00      |08-08-2022 13:00:00   | 558:19:30
US |    21-04-2023 10:30:00      |10-09-2022 18:03:00   | 111:44:26
US |    01-08-2022 10:00:00      |05-08-2022 10:00:00   | 15:44:26
US |    01-08-2022 09:00:00      |02-08-2022 12:30:00   | Invalid Data


用户不同意在上传时更正,他希望在自动化过程中清理日期格式。请在这方面给予帮助。
谢啦,谢啦

egdjgwm8

egdjgwm81#

当转换excel datetime时,实际上有一个不同的函数:pd.to_timedelta().为了处理哪个值应该接收哪个函数,我将创建一个掩码,然后反转它(或者如果有两种以上的格式,则创建另一个掩码)。

#Check for the numerical excel date format
mask = pd.to_numeric(df['FE RETA'], errors='coerce').notna()

#Convert excel dates to datetime
df.loc[mask, 'FE RETA'] = pd.to_timedelta(df.loc[mask, 'FE RETA'], unit='d') + pd.Timestamp('1899-12-30')

#Convert the string date format to datetime
df.loc[~mask, 'FE RETA'] = pd.to_datetime(df.loc[~mask, 'FE RETA'], errors='coerce', format='%m/%d/%Y %I:%M:%S %p')
#Convert to your desired format
df['FE RETA'] =df['FE RETA'].dt.strftime('%d-%m-%Y %H:%M:%S')

字符串
希望这对你有用

相关问题