python - 修复将数据从 csv 传递到 SQL 时的类型错误

标签 python mysql sql pandas

场景:继上一个问题( 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/

相关文章:

python - Pycharm 失去了 View 和模板之间的连接

mysql - Oracle Golden Gate 同步 Oracle - mysql

sql - SSIS 包在服务器上运行,但不是作为计划作业(SQL 代理)

python - 多维数组中列的平方和的平方根

python - Kivy 将按钮文本复制到剪贴板

mysql不同类型的公用表

php - Magento 安装失败

sql - 可以用动态部分扩展静态 SQL 语句吗?

mysql - sql 中的右侧 Alt 移位

python - 使用 win32com 或 xlrd 的 Excel 数据库或 mysql 中的数据库