场景:继上一个问题( 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
最佳答案
如果您的日期
列返回国际格式的日期,您需要在转换为日期时间时反射(reflect)这一点。
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
关于python - 修复将数据从 csv 传递到 SQL 时的类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46218306/