我有一个带有大约200,000个索引/行和30列的Pandas DataFrame。 我需要直接将其导出到.mdb文件,将其转换为csv并手动导入将不起作用。
我了解像pyodbc这样的工具对导入/读取访问有很大帮助,但是关于如何导出的文档很少。
我很乐意任何人都能提供的帮助,并会非常感谢任何示例。
答案 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)
现在为Microsoft Access提供了受支持的外部SQLAlchemy方言...
https://github.com/gordthompson/sqlalchemy-access
...,这使您可以直接通过pyodbc和Microsoft Access ODBC驱动程序(在Windows上)使用熊猫的to_sql
方法。