努力将 DBF 文件转换为 Pandas DataFrame

Struggles with converting a DBF file to Pandas DataFrame

我正在尝试在此处使用 public 制作的加拿大广播电台 DBF 文件: https://sms-sgs.ic.gc.ca/eic/site/sms-sgs-prod.nsf/eng/h_00015.html

我想专门将 fmstatio.dbf 文件读入 Pandas DataFrame。我在 Python.

中尝试了两个通常推荐的 DBF 包

当使用 simpledbf (https://pypi.org/project/simpledbf/) 时,我只在使用 dbf.to_dataframe() 函数时获取列名。

我还在 pypi 上尝试了 dbf (https://pypi.org/project/dbf/)。我能够将 DBF 文件读入 table:

table = dbf.Table(filename='/datadrive/canada/fmstatio.dbf')
table.open(dbf.READ_ONLY)
print(table)
table.close()

并在table上得到以下信息:

   Table:         /datadrive/canada/fmstatio.dbf
    Type:          dBase III Plus
    Codepage:      ascii (plain ol' ascii)
    Status:        DbfStatus.READ_ONLY
    Last updated:  1921-12-07
    Record count:  8428
    Field count:   37
    Record length: 221 

但是当尝试转换成DataFrame时,我没有成功:

oh_canada = pd.DataFrame(table)
table.close()

我收到错误:

    data = fielddef[CLASS](decoder(data)[0])
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 4: ordinal not in range(128)

可能有人知道在 Pandas 中处理这种 DBF 文件的最佳方法吗?非常感谢。

table 说它是“普通的旧 ascii”,但它在撒谎。它包含“e with acute accent”,考虑到加拿大数据库中的法语内容,这并不奇怪。要解决此问题,您需要覆盖代码页:

table = dbf.Table(filename='/datadrive/canada/fmstatio.dbf',codepage=3)

“3”表示默认 Windows 代码页,CP1252。这样,我就可以读取文件了。

我仍然不确定 pandas 是否可以导入它作为迭代器提供的格式。您可能需要使用 export 将其转换为列表。