python - 用 Pandas 读取 Access 表的最简单方法是什么?
问题描述
我有一个访问数据库名称 DB_IMPORT_2020.accdb。它仅包含一个名为 DB_IMPORT_2020_PM 的表。我一直在努力尝试将该表导入 Pandas。到目前为止我一直在做的是:
# define components of our connection string
driver = '{Microsoft Access Driver (*.mdb, *.accdb)}'
filepath = r"C:\Users\corra\Desktop\DB_IMPORT_2020.accdb"
# create a connection to the database
cnxn = pyodbc.connect(driver = driver, dbq = filepath, autocommit = True)
crsr = cnxn.cursor()
# define the components of a query
table_name = 'DB_IMPORT_2020_PM'
# define query
query = "SELECT * FROM {}".format(table_name)
# execute the query
crsr.execute(query)
data = crsr.fetchall()
df = pd.DataFrame(data)
然后我遇到了这样一种情况,即我有一个 pandas 数据框,它只有一列,每一行都有一个列表。
0
________________________________________________________
0 [86232, 2019-09-12, INTERNET, ... , N ]
1 [86233, 2019-09-12, INTERNET, ... , M ]
2 [86234, 2019-09-12, MEZZO LIBERO, ... , Q ]
3 ...
我觉得这不是正确的方法,而且过于复杂。有谁知道用 Pandas 读取 Access 表中数据的更简单方法?
这是我使用 data = crsr.fetchall() 得到的列表
[(86232, datetime.datetime(2019, 9, 12, 0, 0), 'INTERNET', 'A.M Web', 'Brand_SMX', 0.0, 'gen', '20_FCST', 'OnLine', 'dipendente s', 'Low Rev.', 'STX', 'A.M', 'INTERNET', 'Brand_SMX', 'dipendente s', 'STORICI', 'TIER 1', 1.0, 'TIER 1', 'ALIMENTARI', '04_SRF', 'SMX', 'ALTRI', 'STC', 'Reservation', 'Off + On', 'Online_Res', 'TIER 1', None, None, None, None),
(86233, datetime.datetime(2019, 9, 12, 0, 0), 'INTERNET', 'A.M Web', 'Brand_SMX', 0.0, 'feb', '20_FCST', 'OnLine', 'dipendente s', 'Low Rev.', 'STC', 'A. M', 'INTERNET', 'Brand_SMX', 'dipendente s', 'STORICI', 'TIER 1', 1.0, 'TIER 1', 'ALIMENTARI', '04_SRF', 'SMX', 'ALTRI', 'STX', 'Reservation', 'Off + On', 'Online_Res', 'TIER 1', None, None, None, None),
(86234, datetime.datetime(2019, 9, 12, 0, 0), 'MEZZO LIBERO', 'S ITALIA SRL', 'S ELECTRONICS', 0.0, 'gen', '20_FCST', 'OffLine', 'BO / CI', 'Low Rev.', 'STX', 'S Italia Srl', 'MEZZO LIBERO', 'S', 'BEN BOT', 'STORICI', 'INTERCx', 1.0, 'INTERCx', 'INFORMATICA/FOTOGRAFIA', '04_SRF', 'SMX', 'ALTRI', 'STC', 'Reservation', 'Off + On', 'Offline_Res', 'INTX', None, None, None, None),...]
解决方案
使用 Access 数据库和 pandas 的最简单方法是使用sqlalchemy-access方言(我维护)。
有谁知道用 Pandas 读取 Access 表中数据的更简单方法?
只需使用 pandas 的read_sql_table方法:
import pandas as pd
import sqlalchemy as sa
table_name = 'DB_IMPORT_2020_PM'
engine = sa.create_engine("access+pyodbc://@my_accdb_dsn")
df = pd.read_sql_table(table_name, engine)
推荐阅读
- python - 如何使用 Sphinx 为 3 个项目生成一个复杂的文档网站
- node.js - 设置firebase实时数据库权限以从服务器使用
- machine-learning - 一类 SVM 算法耗时过长
- jupyter-notebook - 在 Mac 中启动 Juypter
- tensorflow - val_loss 不降低的 conv-autoencoder
- python - 具有 256 个隐藏嵌入的 BERT
- mongodb - Mongo 对执行用户拥有的目录的只读权限失败
- json - 如何对 JSON 模式对象的值设置限制?
- ios - 使用 SVG(作为 PDF)的自定义 UITabBarItem 图像在 Xcode ios 中应该是什么尺寸?
- testing - 使用 cypress 在下拉列表(自动完成组件)中未显示任何选项