convert your nulls to an acceptable value at source. I do this when I work with numpy and featureclasses. For text it is simple just query for nulls and replace with text like "NONE", for integers, you can use some number like -999 etc
Try this on one of your tables to see what you get
def _make_nulls_(in_fc, int_null=-999):
"""Return null values for a list of fields objects, excluding objectid
and geometry related fields. Throw in whatever else you want.
Parameters
----------
in_flds : list of arcpy field objects
Use arcpy.ListFields to get a list of featureclass fields.
int_null : integer
A default to use for integer nulls since there is no ``nan`` equivalent
Other options include
>>> np.iinfo(np.int32).min # -2147483648
>>> np.iinfo(np.int16).min # -32768
>>> np.iinfo(np.int8).min # -128
>>> [i for i in cur.__iter__()]
>>> [[j if j else -999 for j in i] for i in cur.__iter__() ]
"""
nulls = {'Double': np.nan, 'Single': np.nan, 'Float': np.nan,
'Short': int_null, 'SmallInteger': int_null, 'Long': int_null,
'Integer': int_null, 'String':str(None), 'Text':str(None),
'Date': np.datetime64('NaT')}
#
desc = arcpy.da.Describe(in_fc)
if desc['dataType'] != 'FeatureClass':
print("Only Featureclasses are supported")
return None, None
in_flds = desc['fields']
shp = desc['shapeFieldName']
good = [f for f in in_flds if f.editable and f.name != shp]
fld_dict = {f.name: f.type for f in good}
fld_names = list(fld_dict.keys())
null_dict = {f: nulls[fld_dict[f]] for f in fld_names}
# ---- insert the OBJECTID field
return null_dict, fld_names
... sort of retired...