首页 > 解决方案 > 使用 python 将 pandas 数据框导入 MS Access 表

问题描述

我对 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

标签: pythonpandasdataframems-access

解决方案


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

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

例如。

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

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


推荐阅读