如何将 pandas 日期列写入 Databricks SQL 数据库
How to write pandas date column to Databricks SQL database
我有 pandas
数据框列,其字符串值格式为 YYYY-MM-DD HH:MM:SS:mmmmmmm
,例如 2021-12-26 21:10:18.6766667
。我已经验证所有值都采用这种格式,其中毫秒为 7 位数字。但是以下代码在尝试将数据插入 Azure Databricks SQL 数据库时抛出转换错误(如下所示):
Conversion failed when converting date and/or time from character string
问题:错误的可能原因是什么,我们该如何解决?
备注:转换后的初始值(例如2021-12-26 21:10:18.6766667
)甚至在末尾再加两位数,使之成为2021-12-26 21:10:18.676666700
- 9数字毫秒。
import sqlalchemy as sq
import pandas as pd
import datetime
data_df = pd.read_csv('/dbfs/FileStore/tables/myDataFile.csv', low_memory=False, quotechar='"', header='infer')
data_df['OrderDate'] = data_df['OrderDate'].astype('datetime64[ns]')
data_df.to_sql(name='CustomerOrderTable', con=engine, if_exists='append', index=False, dtype={'OrderID' : sq.VARCHAR(10),
'Name' : sq.VARCHAR(50),
'OrderDate' : sq.DATETIME()})
将日期保留为纯字符串 无需 转换 to_datetime
.
这是因为DataBricks SQL is based on SQLite, and SQLite expects date strings:
In the case of SQLite, date and time types are stored as strings which are then converted back to datetime
objects when rows are returned.
如果原始日期字符串仍然不起作用,请将它们转换 to_datetime
并使用 dt.strftime
:
重新格式化为安全格式
df['OrderDate'] = pd.to_datetime(df['OrderDate']).dt.strftime('%Y-%m-%d %H:%M:%S.%f').str[:-3]
或者如果列已经是datetime
,直接使用dt.strftime
:
df['OrderDate'] = df['OrderDate'].dt.strftime('%Y-%m-%d %H:%M:%S.%f').str[:-3]
我有 pandas
数据框列,其字符串值格式为 YYYY-MM-DD HH:MM:SS:mmmmmmm
,例如 2021-12-26 21:10:18.6766667
。我已经验证所有值都采用这种格式,其中毫秒为 7 位数字。但是以下代码在尝试将数据插入 Azure Databricks SQL 数据库时抛出转换错误(如下所示):
Conversion failed when converting date and/or time from character string
问题:错误的可能原因是什么,我们该如何解决?
备注:转换后的初始值(例如2021-12-26 21:10:18.6766667
)甚至在末尾再加两位数,使之成为2021-12-26 21:10:18.676666700
- 9数字毫秒。
import sqlalchemy as sq
import pandas as pd
import datetime
data_df = pd.read_csv('/dbfs/FileStore/tables/myDataFile.csv', low_memory=False, quotechar='"', header='infer')
data_df['OrderDate'] = data_df['OrderDate'].astype('datetime64[ns]')
data_df.to_sql(name='CustomerOrderTable', con=engine, if_exists='append', index=False, dtype={'OrderID' : sq.VARCHAR(10),
'Name' : sq.VARCHAR(50),
'OrderDate' : sq.DATETIME()})
将日期保留为纯字符串 无需 转换 to_datetime
.
这是因为DataBricks SQL is based on SQLite, and SQLite expects date strings:
In the case of SQLite, date and time types are stored as strings which are then converted back to
datetime
objects when rows are returned.
如果原始日期字符串仍然不起作用,请将它们转换 to_datetime
并使用 dt.strftime
:
df['OrderDate'] = pd.to_datetime(df['OrderDate']).dt.strftime('%Y-%m-%d %H:%M:%S.%f').str[:-3]
或者如果列已经是datetime
,直接使用dt.strftime
:
df['OrderDate'] = df['OrderDate'].dt.strftime('%Y-%m-%d %H:%M:%S.%f').str[:-3]