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

如何从DBF文件中仅读取未删除记录并加载到DataFrame

使用dbfread排除已删除记录的实现方法

dbfread返回的每一条记录对象自带deleted布尔属性,标记该记录是否为已删除状态,你可以在遍历转换时直接过滤,无需单独调用.deleted()属性做差集,实现代码如下:

from dbfread import DBF
import pandas as pd

arcust_dbf = DBF('arcust.dbf', ignore_missing_memofile=True)
# 仅保留未被标记删除的记录
valid_records = [record for record in arcust_dbf if not record.deleted]
arcust = pd.DataFrame(valid_records)

如果你确实需要通过.deleted()属性实现排除逻辑,可以先获取所有已删除记录的唯一标识列(比如主键ID),再从全量记录中过滤匹配的条目,不过该方法性能比直接过滤标记要差,不推荐使用。

更优实现方案与替代第三方包

针对DBF转DataFrame的场景,还有两个兼容性和易用性更好的第三方包可选:

  • simpledbf:专门封装了DBF转DataFrame的能力,默认自动过滤已删除记录,代码最简,适合仅需要读取转换的轻量场景:
from simpledbf import Dbf5
import pandas as pd

dbf = Dbf5('arcust.dbf')
arcust = dbf.to_dataframe()
  • dbf:支持全量DBF操作(读写、修改删除标记、处理不同版本DBF规范),兼容性覆盖VFP、dBase等绝大多数DBF格式,适合需要深度处理DBF文件的场景:
import dbf
import pandas as pd

with dbf.Table('arcust.dbf', ignore_memos=True).open() as table:
    # 筛选未删除记录转换为DataFrame
    arcust = pd.DataFrame(table.select(lambda rec: not rec._deleted))

内容的提问来源于stack exchange,提问作者Sharat Prakash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:27:03