如何从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
相关产品推荐
相关产品推荐

