场景:从上一个问题(Removing the timestamp from a datetime in pandas dataframe)开始跟进我有一个代码将excel中的数据读入pandas数据帧,并使用命令dataframe.to_sql将该数据插入给定的SQL数据库。
问题:由于我的日期是以美国格式(mm / dd / yyyy)检索的,而我的数据库是国际格式(dd / mm / yyyy),我遇到类型错误尝试将我的数据上传到SQL。
我已经尝试了什么:我尝试了上一个问题中给出的建议,并以这种方式运行数据更改,但是当我尝试上传到SQL时出现错误。
我目前正在使用的行:
fnl['Date'] = pd.to_datetime(fnl['Maturity'], errors='coerce')
允许代码运行,但会在SQL中产生问题。
我也尝试过:
fnl['Date'] = pd.to_datetime(fnl['Date'], format='%m/%d/%Y', errors:'coerce')
和
fnl['Date'] = pd.to_datetime(fnl['Date'], format='%m/%d/%Y')
仍然没有成功。
我之前在代码的开头将所有编码更改为utf-8,因此我无法查看问题所在。
问题:如何解决此问题?
数据示例:
Date
1/15/2023
1/15/2023
6/30/2023
6/30/2023
8/1/2022
8/1/2022
7/25/2022
7/25/2022
7/19/2024
7/13/2022
7/13/2022
答案 0 :(得分:1)
如果您的Date
列以国际格式返回日期,则您希望在转换为日期时间时反映出来。
fnl['Date'] = pd.to_datetime(fnl['Date'], format='%m/%d/%Y', errors='coerce')
您需要在源中指定格式,以便正确完成转换。
如果您想将日期时间转换回%m/%d/%Y
格式的字符串,请使用.dt.strftime
函数:
fnl['DateString'] = fnl['Date'].dt.strftime('%d/%m/%Y')
s = pd.to_datetime(df['Date'], format='%m/%d/%Y', errors='coerce')
s
0 2023-01-15
1 2023-01-15
2 2023-06-30
3 2023-06-30
4 2022-08-01
5 2022-08-01
6 2022-07-25
7 2022-07-25
8 2024-07-19
9 2022-07-13
10 2022-07-13
Name: Date, dtype: datetime64[ns]
s = s.dt.strftime('%d/%m/%Y')
s
0 15/01/2023
1 15/01/2023
2 30/06/2023
3 30/06/2023
4 01/08/2022
5 01/08/2022
6 25/07/2022
7 25/07/2022
8 19/07/2024
9 13/07/2022
10 13/07/2022
Name: Date, dtype: object