使用 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 在导入时忽略 \