使用 python 将 pandas 数据框导入 MS Access 表

Posted

技术标签:

【中文标题】使用 python 将 pandas 数据框导入 MS Access 表【英文标题】:Import pandas dataframe into MS Access table with python 【发布时间】:2018-09-17 16:11:25 【问题描述】:

我对 python 还很陌生,正在尝试为我的工作实现一些自动化。目前我正在尝试通过 python 使用来自 CSV 的数据更新 Access 表。到目前为止,我已将 CSV 读入 pandas 数据框,并尝试一次将一行添加到 Access 中。这是我目前所拥有的:

import pandas as pd
import pypyodbc
import glob

df = pd.read_csv("data.csv", header = 0, low_memory = False)
df = df[['Description','SN','Attribute_1','Attribute_2',\
    'Attribute_3','Attribute_4','Cost','Date']]

con = pypyodbc.connect('DRIVER=Microsoft Access Driver \ 
(*.mdb);UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;\
PageTimeout=5;MaxScanRows=8;MaxBufferSize=2048;FIL=MS\
Access;DriverId=25;DefaultDir= \ 
C:/Users/testuser/Documents;DBQ=C:/Users/testuser/ \ 
Documents/Python/test.mdb;')

cursor = con.cursor()

for row in df.iterrows():
    cursor.execute("INSERT INTO test.table1([Description],[SN], 
      [Attribute_1], [Attribute_2],[[Attribute_3],[Attribute_4],\
      [Cost],[Date]) values (?,?,?,?,?,?,?,?)", (row[0], row[1] ,\
      row[2], row[3], row[4], row[5], row[6], row[7]))
    con.commit()
cursor.close()
con.close()

每当我运行它时,我都会收到错误

IndexError: tuple index out of range

我已经查找了导致这种情况的典型原因,据说是错误的索引(即从 1 开始而不是 python 的 0),并确保我从 0 索引开始。

我还到处寻找有关 cursor.execute 命令如何工作的文档,但我仍然感到困惑,不确定我是否有正确的语法用于该语句。任何帮助,将不胜感激!

样本数据:

Description   SN      Attr_1    Attr_2  Attr_3  Attr_4  Cost    Date
type_a      12938475  shiney    black    hard     a     1.09   7/20/18
type_b      18293940  matt      silver   soft     b     0.56   7/20/2018
type_d      18283940  matt      gray     soft     c     0.78   7/16/2018
type_a      18944938  shiney    silver   medium   d     3.4    7/18/2018
type_a      17485003  matt      silver   hard     v     2.3    7/17/2018

【问题讨论】:

【参考方案1】:

“我已经查找了造成这种情况的典型原因,据说是错误的索引(即在 python 中从 1 而不是 0 开始),并确保我从 0 索引开始。”

当您超出预期数据或到达文件末尾时也会导致此问题。

例如。

>>t = (1,2,3)
>>t(2)
3
>>t(3)
IndexError: tuple index out of range

请检查一下。此外,如果这不起作用,请将“data.csv”上传到您的驱动器并发送可共享链接,以便我们可以运行代码并对其进行测试。

【讨论】:

不幸的是,这不起作用。我添加了上面的数据示例。【参考方案2】:

好的,所以,假设您在 Python 中进行了一些分析,将结果保存为 CSV,并且您想要导入它,因为您有一些要映射到的唯一 ID,对吧。就这样做吧。

  DoCmd.TransferText acImportDelim, "", "Table1", "C:\your_path\testing.csv", True, ""
' where table1 is your table

我认为没有比这更复杂的了。如果我错过了重点,请回帖,而您实际上是在尝试做其他事情。

【讨论】:

以上是关于使用 python 将 pandas 数据框导入 MS Access 表的主要内容,如果未能解决你的问题,请参考以下文章

CX_Oracle - 将数据从 Oracle 导入 Pandas 数据框

使用 Python 导入 - 将多个 excel 文件导入数据框

Python - Pandas Dataframe 在导入时忽略 \

Python - Pandas - 导入 Excel 文件,遍历每一行,添加新值,并添加到数据框

将文本文件中的数据导入 pandas 数据框

将带有分组数据的 CSV 导入 Pandas 数据框 [重复]