问题描述
我正在运行以下 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