Linux下用pandas_access读取Access数据库遇整数列含NA值报错
解决Linux下读取Access数据库表的报错问题
方案1:修复pandas_access的整数列NA问题
报错核心是第4列整数类型列存在空值,而pandas默认整数类型无法存储NA。可以通过指定列数据类型规避这个问题:
- 先查看表的列信息,确认第4列的名称:
import pandas_access as mdb # 读取表结构,获取列名 table_schema = mdb.read_schema("EPFDResults_320520290_2023_06_27_03_26_42_USER.mdb", "results") print(table_schema)
- 强制指定该列为浮点类型或pandas的可空整数类型(Int64):
# 替换为实际第4列的名称 target_col = table_schema.iloc[3]['name'] df = mdb.read_table( "EPFDResults_320520290_2023_06_27_03_26_42_USER.mdb", "results", dtype={target_col: 'float64'} )
如果不想逐个指定,也可以直接将所有列转为浮点类型读取,后续再按需转换:
df = mdb.read_table( "EPFDResults_320520290_2023_06_27_03_26_42_USER.mdb", "results", dtype='float64' )
方案2:用mdbtools+Pandas读取(Linux下更稳定)
Linux下pyodbc失败大多是因为缺少Access ODBC驱动,mdbtools是专门处理mdb文件的开源工具,配合Pandas可以绕过驱动问题:
- 安装mdbtools(Amazon Linux AMI用yum):
sudo yum install mdbtools mdbtools-devel
- 导出表为CSV后读取:
# 直接用命令行导出 mdb-export EPFDResults_320520290_2023_06_27_03_26_42_USER.mdb results > results.csv
然后用Pandas读取CSV:
import pandas as pd df = pd.read_csv("results.csv", na_values=['', 'NA'])
也可以在Python中直接调用mdb-export:
import pandas as pd import subprocess import io # 调用mdb-export读取数据 output = subprocess.check_output([ "mdb-export", "EPFDResults_320520290_2023_06_27_03_26_42_USER.mdb", "results" ]) df = pd.read_csv(io.BytesIO(output), na_values=['', 'NA'])
方案3:修复pyodbc的驱动问题(如需使用pyodbc)
如果一定要用pyodbc,需要配置Linux下的Access ODBC驱动:
- 安装依赖包:
sudo yum install unixODBC unixODBC-devel mdbtools-odbc
- 配置ODBC驱动:
编辑/etc/odbcinst.ini文件,添加以下内容:
[MDBToolsODBC] Description = MDBTools ODBC Driver Driver = /usr/lib64/libmdbodbc.so.0 Setup = /usr/lib64/libmdbodbc.so.0 FileUsage = 1
- 连接并读取数据(处理整数列NA问题):
import pyodbc import pandas as pd # 连接数据库 conn_str = "DRIVER={MDBToolsODBC};DBQ=EPFDResults_320520290_2023_06_27_03_26_42_USER.mdb;" conn = pyodbc.connect(conn_str) # 用SQL转换含NA的整数列为浮点类型,替换column4为实际第4列名称 query = "SELECT CAST(column4 AS DOUBLE) AS column4, * FROM results" df = pd.read_sql(query, conn) conn.close()
内容的提问来源于stack exchange,提问作者Mat
相关产品推荐
相关产品推荐

