px = [int(i) for i in element.get('polygon_x').split(" ")]
py = [int(i) for i in element.get('polygon_y').split(" ")]
pdraw.polygon(list(zip(px,py)), fill=colormap[label], outline=colormap[label])
上面的代码在处理包含NaN
数据和2.155000e+02
数据时会出错。NaN
和2.155000e+02
对应的数据类型必须是float
不能是int
。所以上述代码修改为:
px = [i for i in element.get('polygon_x').split(" ")]
py = [i for i in element.get('polygon_y').split(" ")]
px_py_list = []
for x, y in list(zip(px, py)):
#if np.isnan(x) and np.isnan(y):
#if pd.isnull(x) or pd.isnull(y):
if math.isnan(float(x)) or math.isnan(float(y)):
print(x, y)
else:
px_py_list.append((np.round(float(x)), np.round(float(y))))
pdraw.polygon(px_py_list, fill=colormap[label], outline=colormap[label])
判断是否是NaN数据,math.isnan()比np.isnan()和pd.isnull()好用。np.isnan()容易出现错误。
参考资料
ValueError: invalid literal for int() with base 10
python判断数据框中某元素是否为‘nan
如何检查python中的值是否为nan?