Py学习  »  Python

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

Nicole Ehrlich • 5 年前 • 1550 次点击  

我对python还很陌生,正在尝试为我的工作实现一些自动化。目前我正试图通过python用csv中的数据更新一个访问表。到目前为止,我已经将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

我已经找到了导致这种情况的典型原因,也就是说索引错误(即用python从1开始而不是从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
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39122
 
1550 次点击  
文章 [ 2 ]  |  最新文章 5 年前
ryguy72
Reply   •   1 楼
ryguy72    6 年前

好的,那么,假设您在python中做了一些分析,将结果保存为一个csv,并且您希望导入它,因为您有一些要映射到的唯一ID,对吧。就这么做。

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

我不认为这比这更复杂了。如果我没抓住要点,你就回去吧,实际上你在做别的事情。

Amrit Das
Reply   •   2 楼
Amrit Das    6 年前

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

当超出预期数据或到达文件结尾时,也会导致这种情况。

例如:

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

请检查一下这个。此外,如果这不锻炼,请上传“data.csv”到您的驱动器,并发送共享链接,以便我们可以运行代码和测试它。