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

时间:2018-09-17 16:11:25

标签: python pandas dataframe 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

2 个答案:

答案 0 :(得分:0)

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

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

例如

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

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

答案 1 :(得分:0)

好吧,因此,大概是您在Python中进行了一些分析,将结果另存为CSV,并且您想导入它是因为您具有映射到的唯一ID。就是这样做。

 public partial class App : Application
        {
            public static int ScreenWidth;
            public static int ScreenHeight;
            public static Size ScreenSize;
            ...

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