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

2024-09-30 09:25:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行以下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, field, data)
         73             raise ValueError('Unknown field type: {!r}'.format(field.type))
         74         else:
    ---> 75             return func(field, data)
         76 
         77     def parse0(self, field, data):
    
    ~\Anaconda3\lib\site-packages\dbfread\field_parser.py in parseN(self, field, data)
        162             else:
        163                 # Account for , in numeric fields
    --> 164                 return float(data.replace(b',', b'.'))
        165 
        166     def parseO(self, field, data):
    
    ValueError: could not convert string to float: b'*********'

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

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


Tags: inpyselffieldfordatalibpackages
2条回答

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

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

在那种情况下,我的^{} library将返回None

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

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

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

相关问题 更多 >

    热门问题