如何将Pandas DataFrame导出到.mdb文件

时间:2018-12-13 18:12:30

标签: python pandas ms-access access pyodbc

我有一个带有大约200,000个索引/行和30列的Pandas DataFrame。 我需要直接将其导出到.mdb文件,将其转换为csv并手动导入将不起作用。

我了解像pyodbc这样的工具对导入/读取访问有很大帮助,但是关于如何导出的文档很少。

我很乐意任何人都能提供的帮助,并会非常感谢任何示例。

3 个答案:

答案 0 :(得分:3)

首先使用以下命令将数据帧转换为.csv文件

name_of_your_dataframe.to_csv("filename.csv", sep='\t', encoding='utf-8')

然后使用pyodbc将.csv加载到.mdb

MS Access可以直接查询CSV文件并运行Make-Table Query(https://support.office.com/en-us/article/Create-a-make-table-query-96424f9e-82fd-411e-aca4-e21ad0a94f1b)生成结果表。但是,需要进行一些清洁才能清除垃圾行。下面打开两个文件,一个用于读取,另一个用于写入。假设垃圾在csv的第一列中,则if逻辑在第二列中写入包含某些数据的任何行(根据需要进行调整):

import os
import csv
import pyodbc

# TEXT FILE CLEAN
with open('C:\Path\To\Raw.csv', 'r') as reader, open('C:\Path\To\Clean.csv', 'w') as writer:
    read_csv = csv.reader(reader); write_csv = csv.writer(writer,lineterminator='\n')

    for line in read_csv:
        if len(line[1]) > 0:            
            write_csv.writerow(line)

# DATABASE CONNECTION
access_path = "C:\Path\To\Access\\DB.mdb"
con = pyodbc.connect("DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={};" \
                 .format(access_path))

# RUN QUERY
strSQL = "SELECT * INTO [TableName] FROM [text;HDR=Yes;FMT=Delimited(,);" + \
     "Database=C:\Path\To\Folder].Clean.csv;"    
cur = con.cursor()
cur.execute(strSQL)
con.commit()

con.close()                            # CLOSE CONNECTION
os.remove('C\Path\To\Clean.csv')       # DELETE CLEAN TEMP 

答案 1 :(得分:0)

我建议像往常一样将pandas数据框导出到csv:

dataframe_name.to_csv("df_filename.csv", sep=',', encoding='utf-8')

然后您可以将其转换为此stackoverflow answer所示的.mdb文件

答案 2 :(得分:0)

2020更新

现在为Microsoft Access提供了受支持的外部SQLAlchemy方言...

https://github.com/gordthompson/sqlalchemy-access

...,这使您可以直接通过pyodbc和Microsoft Access ODBC驱动程序(在Windows上)使用熊猫的to_sql方法。