Pandas 使用多种不同的日期类型设置datetime格式

Pandas 使用多种不同的日期类型设置datetime格式,pandas,dataframe,Pandas,Dataframe,我正在尝试格式化列“数据”,以形成带有日期的模式 我的格式是: 1/30/20 16:00 1/31/2020 23:59 2020-02-02T23:43:02 下面是数据帧的代码 import requests import pandas as pd import numpy as np url = "https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_r

我正在尝试格式化列“数据”,以形成带有日期的模式

我的格式是:

1/30/20 16:00
1/31/2020 23:59
2020-02-02T23:43:02
下面是数据帧的代码

import requests
import pandas as pd
import numpy as np
url = "https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports"
csv_only  = [i.split("=")[1][1:-1] for i in requests.get(url).text.split(" ") if '.csv' in i and 'title' in i]

combo = [pd.read_csv(url.replace("github","raw.githubusercontent").replace("/tree/","/")+"/"+f) for f in csv_only]

one_df = pd.concat(combo,ignore_index=True)

one_df["País"] = one_df["Country/Region"].fillna(one_df["Country_Region"])
one_df["Data"] = one_df["Last Update"].fillna(one_df["Last_Update"])
我试着添加下面的代码,但是没有得到我想要的结果

pd.to_datetime(one_df['Data'])
one_df.style.format({"Data": lambda t: t.strftime("%m/%d/%Y")})
有什么帮助吗

更新

这是完整的代码,但不起作用。使用不同的日期格式打印的许多例外情况

import requests
import pandas as pd
import numpy as np
from datetime import datetime
url = "https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports"
csv_only  = [i.split("=")[1][1:-1] for i in requests.get(url).text.split(" ") if '.csv' in i and 'title' in i]

combo = [pd.read_csv(url.replace("github","raw.githubusercontent").replace("/tree/","/")+"/"+f) for f in csv_only]

one_df = pd.concat(combo,ignore_index=True)

df = pd.DataFrame()
DATE_FORMATS = ["%m/%d/%y %H:%M", "%m/%d/%Y %H:%M", "%Y-%m-%dT%H:%M:%S", "%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M:%S", "%Y-%m-%d  %H:%M:%S"]

df["Região"] = one_df["Province/State"].fillna(one_df["Admin2"])
df["País"] = one_df["Country/Region"].fillna(one_df["Country_Region"])
df["Data"] = one_df["Last Update"].fillna(one_df["Last_Update"])
df["Confirmados"] = one_df["Confirmed"]
df["Mortes"] = one_df["Deaths"]
df["Recuperados"] = one_df["Recovered"]

def parse(x_):
    for fmt in DATE_FORMATS :
        try:
            tmp = datetime.strptime(x_, fmt).strftime("%m/%d/%Y")
            return tmp
        except ValueError:
            print(x_)

pd.to_datetime(df['Data'])
df['Data'] = df['Data'].apply(lambda x: parse(x))

#df['Data'].strftime('%m/%d/%Y')
#df['Data'] = df['Data'].map(lambda x: x.strftime('%m/%d/%Y') if x else '')

df.to_excel(r'C:\Users\guilh\Downloads\Covid2\Covid-19.xlsx', index=False,  encoding="utf8")
print(df)
您可以将列表中所有可能的格式保存为-

DATE_FORMATS = ["%Y-%m-%d %H:%M:%S", "%Y-%m-%dT%H:%M:%S", "%m/%d/%y %H:%M", "%m/%d/%Y %H:%M"]
定义一个循环遍历格式并尝试对其进行解析的函数。 (修复了一个错误,
print
语句应该在
for
循环之外)

输出

         data
0  01/30/2020
1  01/31/2020
2  02/02/2020
如果
df.apply()
遇到列表中未定义的特定日期格式,它将只打印
None
,因为函数
parse()

您可以将列表中所有可能的格式保存为-

DATE_FORMATS = ["%Y-%m-%d %H:%M:%S", "%Y-%m-%dT%H:%M:%S", "%m/%d/%y %H:%M", "%m/%d/%Y %H:%M"]
定义一个循环遍历格式并尝试对其进行解析的函数。 (修复了一个错误,
print
语句应该在
for
循环之外)

输出

         data
0  01/30/2020
1  01/31/2020
2  02/02/2020

如果
df.apply(),您可以在将所有文件合并到一起之前尝试将其转换为日期时间(一个df['Data'])
对我有效。当我尝试格式化
%d/%m/%Y
时,我得到
值错误:时间数据'1/22/2020 17:00'与格式'%d/%m/%Y'(匹配)
假设日期列与csv中的格式相同,您可以在将所有文件合并到一起之前尝试将其转换为\u datetime(一个df['Data'])对我有效。当我尝试格式化
%d/%m/%Y
时,我得到
值错误:时间数据'1/22/2020 17:00'与格式'%d/%m/%Y'不匹配(匹配)
如何添加一行打印例外日期,以便以日期格式映射它们?由于数据分析依赖于精确的日期和国家,因此我无法获得日期的任何信息。在
except
子句中,您可以添加
打印(x)
(删除
通行证),这将以无法识别的格式打印日期。我遇到了许多异常,如
2020-02-24T14:43:03
2020-02-2414:43:03
和其他日期格式。我用我的完整代码更新了这个问题,包括你的答案,我用错了吗?@guialmachado这样做,基本上我的代码中有一个缺陷,所有的日期都被解析了,但由于语句
print(x)
的位置不正确而被不必要地打印出来,现在请检查我编辑的代码。我如何添加一行来打印异常日期,以便以日期\格式映射它们?由于数据分析依赖于精确的日期和国家,因此我无法获得日期的任何信息。在
except
子句中,您可以添加
打印(x)
(删除
通行证),这将以无法识别的格式打印日期。我遇到了许多异常,如
2020-02-24T14:43:03
2020-02-2414:43:03
和其他日期格式。我用我的完整代码更新了这个问题,包括你的答案,我用错了吗?@guialmachado这样做,基本上我的代码中有一个缺陷,所有的日期都被解析了,但是由于语句
print(x_)
的位置不正确而被不必要地打印出来,现在请检查我编辑的代码。