将列值转换为日期时间以插入 AccessDB

Posted

技术标签:

【中文标题】将列值转换为日期时间以插入 AccessDB【英文标题】:Converting column values into datetime to insert into AccessDB 【发布时间】:2017-12-06 23:10:22 【问题描述】:

我正在尝试将 Pandas Dataframe 的值填充到 MS Access 表中。我正在使用以下 Pandas 内置 DF.iterrows() 遍历 DataFrame 的每一行并将每一行插入 Access 表中。

for index,row in df.iterrows():
    print(repr(row['Vote_date'])) #Using iterrows() temporarily converts datetime64[ns] values into Timestamps  
    row['Vote_date'] = row['Vote_date'].to_pydatetime() #This converts all values in this column, except NaT values.

    cursor.execute("INSERT INTO Vote(vote_date) VALUES(?)", row['Vote_date'])  

当我运行此代码时,我收到以下错误:

pyodbc.DataError: ('22008', '[22008] [Microsoft][ODBC Microsoft Access Driver]Datetime field overflow  (36) (SQLExecDirectW)')

Pandas Timestamps 值无法插入到 MS Access 表中。研究表明,我需要将列值转换为 Python datetime 值才能插入 Access DB。

我可以使用另一种迭代方法将 Python datetime 值成功插入 MS Access 吗?还要处理NaT 值吗?

【问题讨论】:

【参考方案1】:

您是否考虑过将其转换为日期时间然后运行循环? https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.to_pydatetime.html

df['Vote_date'] = df['Vote_date'].dt.to_pydatetime()
df.loc[df['Vote_date'].isnull(),"Vote_date"] = None
for index,row in df.iterrows():
    cursor.execute("INSERT INTO Vote(vote_date) VALUES(?)", row['Vote_date'])  

【讨论】:

@ Gabrieal A - 是的,我已经尝试使用 to_pydatetime() 将列中的所有值转换为 Python datetime。但是,此函数无法成功转换NaT 值。 尝试用 None 替换所有 NaT 值。我更新了我的答案,告诉你如何做到这一点 @Gabriel A - 我尝试了您的更新答案,但收到以下错误:AttributeError: 'Series' object has no attribute 'to_pydatetime' @Mook 解决了这个问题。 @Gabriel A - 我尝试了您更新的答案,但 NaT 值保持不变。你知道我如何检查数据框列是否可以为空(例如,它可以包含 Null/None 值)吗?【参考方案2】:

我很幸运这样做:

import pandas as pd

df = pd.DataFrame(['01/01/2019',None], columns=['datetime_field'])
df['datetime_field'] = pd.to_datetime(df['datetime_field'])

df['datetime_field'] = pd.to_datetime(df['datetime_field'], errors='coerce').where(df['datetime_field'].notnull(), 0.0)

原来这个字段中的空值是NaT。

熊猫where docs

【讨论】:

以上是关于将列值转换为日期时间以插入 AccessDB的主要内容,如果未能解决你的问题,请参考以下文章

将列从日期转换为日期时间

将列字符串转换/解析为日期时间值 - 熊猫

当str的格式为dd/mm/yyyy时,如何将列类型从str转换为日期?

如何将 Pandas 数据框中的字符串转换为“日期”数据类型?

Python/Pandas/Datetime:将列中的整个列表转换为日期时间

将列值转换为行值