在 python 中处理不同的日期格式
Dealing with different date formats in python
所以我有一个关于来自 excel sheet 的日期的问题,我正在将其转换为 CSV,然后加载到数据框中。基本上我每天处理的数据可以有两种不同的格式。这两个日期列称为 Appointment Date
和 Attended Date
我正在处理 (DD/MM/YYYY HH:MM) 和 (YYYY/MM/DD HH:MM) 并且它来自第三方所以我无法设置日期格式结构.我需要做的是解析数据并删除 HH:MM 并输出数据只有 DD/MM/YYYY.
我目前的代码如下:
df['Appointment Date'] = df['Appointment Date'].str.replace(' ', '/', regex=True)
df['Attended Date'] = df['Attended Date'].str.replace(' ', '/', regex=True)
df['Appointment Date'] = pd.to_datetime(df['Appointment Date'], format="%d/%m/%Y/%H:%M").dt.strftime("%d/%m/%Y")
df['Attended Date'] = pd.to_datetime(df['Attended Date'], format="%d/%m/%Y/%H:%M").dt.strftime("%d/%m/%Y")
但是当数据以 YYYY/MM/DD HH:MM 形式出现时,我无法解析数据
异常错误:
time data '2021-10-08/00:00:00' does not match format '%d/%m/%Y/%H:%M' (match)
关于如何解决这个问题有什么想法吗?
用一种方法试试,如果不行,再换一种方法。
try:
df['Appointment Date'] = pd.to_datetime(df['Appointment Date'], format="%d/%m/%Y/%H:%M:%S").dt.strftime("%d/%m/%Y")
except WhateverDateParseException:
df['Appointment Date'] = pd.to_datetime(df['Appointment Date'], format="%Y/%m/%d/%H:%M:%S").dt.strftime("%d/%m/%Y")
当然,不要 WhateverDateParseException
使用代码中引发的实际异常。
编辑:修复了缺失的“%S”
我会使用正则表达式,如下所示:
import pandas as pd
df = pd.DataFrame({"daytime": ["31/12/2020 23:59", "2020/12/31 23:59"]})
df["daypart"] = df["daytime"].str.replace(r" \d\d:\d\d","") # drop HH:MM part
df["day"] = df["daypart"].str.replace(r"(\d\d\d\d)/(\d\d)/(\d\d)", r"//")
print(df)
输出
daytime daypart day
0 31/12/2020 23:59 31/12/2020 31/12/2020
1 2020/12/31 23:59 2020/12/31 31/12/2020
说明:我在第二个.replace
中使用了所谓的捕获组,如果有(4位)/(2位)/(2位)他们的顺序被重新安排,第3位变成第1位,第 2 个变成第 2 个,第 1 个变成第 3 个(注意组是基于 1 的,而不是像一般 python
索引的情况那样是 0 基)。 AS day
格式现在是一致的,您可以轻松解析它。
如 @C14L 所述,可以遵循该方法,但我猜看到你的异常是你需要在你的时间格式中添加秒格式 (%S),所以更新后的代码会像
try:
df['Appointment Date'] = pd.to_datetime(df['Appointment Date'], format="%d/%m/%Y/%H:%M:%S").dt.strftime("%d/%m/%Y")
except WhateverDateParseException:
df['Appointment Date'] = pd.to_datetime(df['Appointment Date'], format="%Y/%m/%d/%H:%M:%S").dt.strftime("%d/%m/%Y")
格式 %d/%m/%Y/%H:%M
与日期时间字符串 2021-10-08/00:00:00
不匹配。您需要为此日期时间字符串使用 %Y-%m-%d/%H:%M:%S
。
演示:
from datetime import datetime
date_time_str = '2021-10-08/00:00:00'
date_str = datetime.strptime(date_time_str, '%Y-%m-%d/%H:%M:%S').strftime('%d/%m/%Y')
print(date_str)
输出:
08/10/2021
所以我有一个关于来自 excel sheet 的日期的问题,我正在将其转换为 CSV,然后加载到数据框中。基本上我每天处理的数据可以有两种不同的格式。这两个日期列称为 Appointment Date
和 Attended Date
我正在处理 (DD/MM/YYYY HH:MM) 和 (YYYY/MM/DD HH:MM) 并且它来自第三方所以我无法设置日期格式结构.我需要做的是解析数据并删除 HH:MM 并输出数据只有 DD/MM/YYYY.
我目前的代码如下:
df['Appointment Date'] = df['Appointment Date'].str.replace(' ', '/', regex=True)
df['Attended Date'] = df['Attended Date'].str.replace(' ', '/', regex=True)
df['Appointment Date'] = pd.to_datetime(df['Appointment Date'], format="%d/%m/%Y/%H:%M").dt.strftime("%d/%m/%Y")
df['Attended Date'] = pd.to_datetime(df['Attended Date'], format="%d/%m/%Y/%H:%M").dt.strftime("%d/%m/%Y")
但是当数据以 YYYY/MM/DD HH:MM 形式出现时,我无法解析数据 异常错误:
time data '2021-10-08/00:00:00' does not match format '%d/%m/%Y/%H:%M' (match)
关于如何解决这个问题有什么想法吗?
用一种方法试试,如果不行,再换一种方法。
try:
df['Appointment Date'] = pd.to_datetime(df['Appointment Date'], format="%d/%m/%Y/%H:%M:%S").dt.strftime("%d/%m/%Y")
except WhateverDateParseException:
df['Appointment Date'] = pd.to_datetime(df['Appointment Date'], format="%Y/%m/%d/%H:%M:%S").dt.strftime("%d/%m/%Y")
当然,不要 WhateverDateParseException
使用代码中引发的实际异常。
编辑:修复了缺失的“%S”
我会使用正则表达式,如下所示:
import pandas as pd
df = pd.DataFrame({"daytime": ["31/12/2020 23:59", "2020/12/31 23:59"]})
df["daypart"] = df["daytime"].str.replace(r" \d\d:\d\d","") # drop HH:MM part
df["day"] = df["daypart"].str.replace(r"(\d\d\d\d)/(\d\d)/(\d\d)", r"//")
print(df)
输出
daytime daypart day
0 31/12/2020 23:59 31/12/2020 31/12/2020
1 2020/12/31 23:59 2020/12/31 31/12/2020
说明:我在第二个.replace
中使用了所谓的捕获组,如果有(4位)/(2位)/(2位)他们的顺序被重新安排,第3位变成第1位,第 2 个变成第 2 个,第 1 个变成第 3 个(注意组是基于 1 的,而不是像一般 python
索引的情况那样是 0 基)。 AS day
格式现在是一致的,您可以轻松解析它。
如 @C14L 所述,可以遵循该方法,但我猜看到你的异常是你需要在你的时间格式中添加秒格式 (%S),所以更新后的代码会像
try:
df['Appointment Date'] = pd.to_datetime(df['Appointment Date'], format="%d/%m/%Y/%H:%M:%S").dt.strftime("%d/%m/%Y")
except WhateverDateParseException:
df['Appointment Date'] = pd.to_datetime(df['Appointment Date'], format="%Y/%m/%d/%H:%M:%S").dt.strftime("%d/%m/%Y")
格式 %d/%m/%Y/%H:%M
与日期时间字符串 2021-10-08/00:00:00
不匹配。您需要为此日期时间字符串使用 %Y-%m-%d/%H:%M:%S
。
演示:
from datetime import datetime
date_time_str = '2021-10-08/00:00:00'
date_str = datetime.strptime(date_time_str, '%Y-%m-%d/%H:%M:%S').strftime('%d/%m/%Y')
print(date_str)
输出:
08/10/2021