You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下用pandas_access读取Access数据库遇整数列含NA值报错

解决Linux下读取Access数据库表的报错问题

方案1:修复pandas_access的整数列NA问题

报错核心是第4列整数类型列存在空值,而pandas默认整数类型无法存储NA。可以通过指定列数据类型规避这个问题:

  1. 先查看表的列信息,确认第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)
  1. 强制指定该列为浮点类型或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可以绕过驱动问题:

  1. 安装mdbtools(Amazon Linux AMI用yum):
sudo yum install mdbtools mdbtools-devel
  1. 导出表为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驱动:

  1. 安装依赖包:
sudo yum install unixODBC unixODBC-devel mdbtools-odbc
  1. 配置ODBC驱动:
    编辑/etc/odbcinst.ini文件,添加以下内容:
[MDBToolsODBC]
Description = MDBTools ODBC Driver
Driver = /usr/lib64/libmdbodbc.so.0
Setup = /usr/lib64/libmdbodbc.so.0
FileUsage = 1
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:55:03