Python 读取 .DBF 文件时“无法将字符串转换为浮点数” - 处理错误的传感器数据

问题描述 投票:0回答:2

我正在尝试读取一些传感器数据,这些数据以 .DBF 格式存储,通常工作得很好。然而,我的一个传感器似乎出现了一些问题,突然间,我常用的脚本不再工作了。

让我澄清一下:每个文件唯一的表格由四列组成(时间、温度、湿度、露点),在某个点(大致跨越第 25 行到第 150 行左右),只有湿度值显然设置为“-- 327”,python 尝试将其转换为浮点数,但显然失败了。从我所做的实验以及该时间跨度之前和之后的值(始终为 0.0)我知道,这些值实际上对我的分析并不感兴趣。

现在我无法理解的是,我正在逐行读取数据(在创建 pandas df 之前我还有其他一些事情要做)并且我认为我已经准备好了对于奇怪的值,通过这样做:

import numpy as np
import dbfread

data = dbfread.DBF(file)
for line in data:
    try:
         val_humi = line["humidity"]
    except Exception:
        val_humi = np.nan
        print("Error reading the humidity")
    default_further_processing_of_read_value_and_df_insertion(val_humi)

虽然可能不是最佳实践,但这通常对我有用,因为我并不真正关心在包含数千个条目的文件中将这几个值设置为 np.nan 。

如何消除收到的错误消息,以便脚本的其余部分可以继续工作?我很感激任何建议。

ValueError: could not convert string to float: b'--327'

附注: 我的第一个想法是直接将dbf加载到pd.dataframe中,但是错误是一样的。

到目前为止,我的下一个最佳想法是手动检查每个读取值(性能不是问题)是否等于“--327”,然后手动将其设置为“0”,但我什至无法到达那里当我尝试提取该值时,就会抛出错误消息。也许有像 <"set_read_data_type" = str> 之类的选项?

提前致谢!

编辑: 也许这也有帮助: 如果我将 dbf 文件导入到 Excel 中,错误值将显示为空单元格,而仅使用 DBFViewer2000 等打开文件会显示 --327 值,Python 也会看到该值。

python type-conversion dbf
2个回答
2
投票

使用我的 dbf 库,您可以指定自己的浮点转换例程来处理奇怪的错误:

import dbf

def fix_float(string):
    try:
        return float(string)
    except ValueError:
        return 0.0

data = dbf.Table(file, default_data_types={'N': fix_float})
data.open()
for record in data:
    # do stuff

请注意,

dbf
选择处理数据和数据访问的方式存在一些差异,因此请花几分钟进行探索。


0
投票

在 dbfread 的文档中,您可以找到如何使用 InvalidValue 子类化 FieldParser 进行管理。

© www.soinside.com 2019 - 2024. All rights reserved.