值错误:无法将字符串转换为浮点数:b'*********'

问题描述

我正在运行以下 python 代码:直到今天它一直运行良好

import pandas as pd
import dbfread

data = dbfread.DBF(data.DBF,load = True)
df = pd.DataFrame(data)

我收到以下错误消息:不知道出了什么问题?

    ValueError                                Traceback (most recent call last)
    ~\Anaconda3\lib\site-packages\dbfread\field_parser.py in parseN(self,field,data)
        157         try:
    --> 158             return int(data)
        159         except ValueError:
    
    ValueError: invalid literal for int() with base 10: b'*********'
    
    During handling of the above exception,another exception occurred:
    
    ValueError                                Traceback (most recent call last)
    <ipython-input-9-d243d1e0719c> in <module>
    ----> 1 data = dbfread.DBF('LNMSTR.DBF',load = True)
          2 df = pd.DataFrame(data)
    
    ~\Anaconda3\lib\site-packages\dbfread\dbf.py in __init__(self,filename,encoding,ignorecase,lowernames,parserclass,recfactory,load,raw,ignore_missing_memofile)
        131 
        132         if load:
    --> 133             self.load()
        134 
        135     @property
    
    ~\Anaconda3\lib\site-packages\dbfread\dbf.py in load(self)
        166         """
        167         if not self.loaded:
    --> 168             self._records = list(self._iter_records(b' '))
        169             self._deleted = list(self._iter_records(b'*'))
        170 
    
    ~\Anaconda3\lib\site-packages\dbfread\dbf.py in _iter_records(self,record_type)
        306                                  for field in self.fields]
        307                     else:
    --> 308                         items = [(field.name,309                                   parse(field,read(field.length))) \
        310                                  for field in self.fields]
    
    ~\Anaconda3\lib\site-packages\dbfread\dbf.py in <listcomp>(.0)
        307                     else:
        308                         items = [(field.name,--> 309                                   parse(field,read(field.length))) \
        310                                  for field in self.fields]
        311 
    
    ~\Anaconda3\lib\site-packages\dbfread\field_parser.py in parse(self,data)
         73             raise ValueError('UnkNown field type: {!r}'.format(field.type))
         74         else:
    ---> 75             return func(field,data)
         76 
         77     def parse0(self,data):
    
    ~\Anaconda3\lib\site-packages\dbfread\field_parser.py in parseN(self,data)
        162             else:
        163                 # Account for,in numeric fields
    --> 164                 return float(data.replace(b',',b'.'))
        165 
        166     def parSEO(self,data):
    
    ValueError: Could not convert string to float: b'*********'

如果有人能帮助我理解并解决这个问题,我将不胜感激。是我的 DBF 数据库的问题还是我的代码的问题?

更新:我可以在家里的电脑上运行相同的代码而不会出错。但它无法通过工作的计算机。你认为它可能是与数据库本身无关的其他东西吗?很奇怪。

解决方法

查看 How do I convert a .dbf file into a Pandas DataFrame? 以获取将 dbf 表转换为 Pandas DataFrame 的函数。

为了回答您的问题,为该记录的该列存储的字节是一堆星号 (*),这显然不是数字。某些程序,例如 FoxPro,在无法存储实际值时会存储星号。

在这种情况下,我的 dbf library 将返回 None

,

从文档中,由于您使用 pandas.DataFrame 导入数据,因此文档向我显示您使用的是“DataType,inference”参数。这意味着当您传入另一个数据点时,您正在导入的数据可能会被读取为整数。如果您正在读取的数据集具有混合数据类型(即您正在导入的一些数据是 int 和一些浮点数,它可能会导致问题)。

在错误的底部,您将看到 ValueError: could not convert string to float: b'*********',这可能是因为您试图导入一个字符串来代替浮点数(在这种情况下,它实际上看起来像多个星号的字符串:这可能是列标题分隔符)。也许在尝试将其加载到 DataFrame 之前从数据字符串中删除它,并查看它是否有效(通过在将它加载到 DataFrame 函数之前打印出 data 变量来检查这一点)。

您可以在此处阅读更多相关信息: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dtypes.html#pandas.DataFrame.dtypes