With the caveat that I have not used this library, you might check your code usage.
The documentation says to only use the tail of list if the field list is from the Reader class.
w.fields = r.fields[1:] # skip first deletion field
You can see that the first items is a field that is not a type you want.
fields = sf.fields
assert fields == [("DeletionFlag", "C", 1, 0), ["AREA", "N", 18, 5],
["BKG_KEY", "C", 12, 0], ["POP1990", "N", 9, 0], ["POP90_SQMI", "N", 10, 1],
["HOUSEHOLDS", "N", 9, 0],
Try changing you code to:
def writeDims(self, params):
r = shapefile.Reader(self.shapefile)
w = shapefile.Writer("new.shp")
w.fields = r.fields[1:] # You should not need to recast r.fields to a list.
for key in params.keys():
for shaperec in r.iterShapeRecords():
Additionally, your key/value pairs in QGIS suggest there is a an issue with the field types in your final shapefile. Your float fields should not have spaces and then more numbers.
This suggest that numbers are being inserted as strings and not floats. Not sure if this will fix the problem or it might exist else where, DBF database are really simple (you can edit them in a spreadsheet program) and if the library is not doing any type checking it might be performing incorrect inserts.