非常难受,因为一个空缺值耽误了好久的时间,不想再有人踩同样的坑了。
首先非常感谢这一篇文章,能解决大多数问题。http://t.csdn.cn/iWdIzhttp://t.csdn.cn/iWdIz但是!!!一旦出现错误:ValueError: could not convert string to float: b'-nan(ind)',就是dbf文件中出现了空缺值。
同时记录一下自己根据大佬代码自己改的:
from dbfread import DBF
import os
import dbfread as df
import pandas as pd
import numpy as np
dbf_filename = "dbf文件的路径文件夹" # dbf文件
xls_filename = "xlsx文件输出的路径文件夹" # 输出路径
for file in os.listdir(dbf_filename):
if file.endswith('.dbf'):
table = DBF(os.path.join(dbf_filename, file), encoding='utf-8')
records = []
for record in table:
for key, value in record.items():
if isinstance(value, bytes):
try:
value = value.decode('utf-8')
except UnicodeDecodeError:
value = ''
try:
value = float(value)
except ValueError:
value = np.nan
record[key] = value
records.append(record)
df = pd.DataFrame(records)
df.replace(['-nan', 'ind'], pd.np.nan, inplace=True)
output_file = file.replace('.dbf', '.xlsx')
df.to_excel(os.path.join(xls_filename, output_file), index=False)
print('----已处理完成----')
这里面主要是将遇到的字节字符串赋NaN值,保证顺利读取。但同时无法读取有空值的文件,会报相同的错误。
如果能在遍历文件夹的时候将有空值的文件跳过,最后并打印出来跳过的文件名那就更好了,希望各位大佬们添砖加瓦能实现这一功能!
纪念我因此花费的好多时间~^~