有人知道 python 中的这个错误吗?我该如何解决这个问题?
Do any one know about this Error in python? how can I resolve this?
我正在使用 MapBoxGl Python 库在地图上绘制数据,这是我的代码,它从 Pandas DataFrame 获取纬度、经度和点并尝试制作 geojson,这里是代码
data4 = df_to_geojson(result, properties= ['speed'], lat='lat', lon='lon')
print (data4)
但是我收到这个错误,我不熟悉这个错误,我找过它但没有找到任何解决方案:
> --------------------------------------------------------------------------- ValueError Traceback (most recent call
> last) ~\Anaconda3\lib\site-packages\IPython\core\formatters.py in
> __call__(self, obj)
> 691 type_pprinters=self.type_printers,
> 692 deferred_pprinters=self.deferred_printers)
> --> 693 printer.pretty(obj)
> 694 printer.flush()
> 695 return stream.getvalue()
>
> ~\Anaconda3\lib\site-packages\IPython\lib\pretty.py in pretty(self,
> obj)
> 363 if cls in self.type_pprinters:
> 364 # printer registered in self.type_pprinters
> --> 365 return self.type_pprinters[cls](obj, self, cycle)
> 366 else:
> 367 # deferred printer
>
> ~\Anaconda3\lib\site-packages\IPython\lib\pretty.py in inner(obj, p,
> cycle)
> 594 if basetype is not None and typ is not basetype and typ.__repr__ != basetype.__repr__:
> 595 # If the subclass provides its own repr, use it instead.
> --> 596 return p.text(typ.__repr__(obj))
> 597
> 598 if cycle:
>
> ~\Anaconda3\lib\site-packages\geojson\base.py in __repr__(self)
> 25
> 26 def __repr__(self):
> ---> 27 return geojson.dumps(self, sort_keys=True)
> 28
> 29 __str__ = __repr__
>
> ~\Anaconda3\lib\site-packages\geojson\codec.py in dumps(obj, cls,
> allow_nan, **kwargs)
> 30 def dumps(obj, cls=GeoJSONEncoder, allow_nan=False, **kwargs):
> 31 return json.dumps(to_mapping(obj),
> ---> 32 cls=cls, allow_nan=allow_nan, **kwargs)
> 33
> 34
>
> ~\Anaconda3\lib\json\__init__.py in dumps(obj, skipkeys, ensure_ascii,
> check_circular, allow_nan, cls, indent, separators, default,
> sort_keys, **kw)
> 236 check_circular=check_circular, allow_nan=allow_nan, indent=indent,
> 237 separators=separators, default=default, sort_keys=sort_keys,
> --> 238 **kw).encode(obj)
> 239
> 240
>
> ~\Anaconda3\lib\json\encoder.py in encode(self, o)
> 197 # exceptions aren't as detailed. The list call should be roughly
> 198 # equivalent to the PySequence_Fast that ''.join() would do.
> --> 199 chunks = self.iterencode(o, _one_shot=True)
> 200 if not isinstance(chunks, (list, tuple)):
> 201 chunks = list(chunks)
>
> ~\Anaconda3\lib\json\encoder.py in iterencode(self, o, _one_shot)
> 255 self.key_separator, self.item_separator, self.sort_keys,
> 256 self.skipkeys, _one_shot)
> --> 257 return _iterencode(o, 0)
> 258
> 259 def _make_iterencode(markers, _default, _encoder, _indent, _floatstr,
>
> ValueError: Out of range float values are not JSON compliant
你的数据框中有 NaNs 吗?如果是这样,这个 issue 似乎是相关的。如果没有看到相关数据框的内容,我很难说出到底出了什么问题,但一个可能的解决方法是在调用 [=17 之前删除任何 NaNs 或其他不可序列化的值=]().
好吧,我得到了我的问题的正确答案当然我删除了所有 NAN 值但我的数据框中仍然有 inf
值,所以按照某人的指示我试图找到整个描述列如
df['column'].describe()
这一行给出了最小值、最大值、平均标准差和其他值,所以我的最大值将变为 inf,所以我使用以下命令删除了这个 inf 值并且它起作用了
df = df[~df.isin([np.nan, np.inf, -np.inf]).any(1)]
这解决了我的问题。
参考
我正在使用 MapBoxGl Python 库在地图上绘制数据,这是我的代码,它从 Pandas DataFrame 获取纬度、经度和点并尝试制作 geojson,这里是代码
data4 = df_to_geojson(result, properties= ['speed'], lat='lat', lon='lon')
print (data4)
但是我收到这个错误,我不熟悉这个错误,我找过它但没有找到任何解决方案:
> --------------------------------------------------------------------------- ValueError Traceback (most recent call
> last) ~\Anaconda3\lib\site-packages\IPython\core\formatters.py in
> __call__(self, obj)
> 691 type_pprinters=self.type_printers,
> 692 deferred_pprinters=self.deferred_printers)
> --> 693 printer.pretty(obj)
> 694 printer.flush()
> 695 return stream.getvalue()
>
> ~\Anaconda3\lib\site-packages\IPython\lib\pretty.py in pretty(self,
> obj)
> 363 if cls in self.type_pprinters:
> 364 # printer registered in self.type_pprinters
> --> 365 return self.type_pprinters[cls](obj, self, cycle)
> 366 else:
> 367 # deferred printer
>
> ~\Anaconda3\lib\site-packages\IPython\lib\pretty.py in inner(obj, p,
> cycle)
> 594 if basetype is not None and typ is not basetype and typ.__repr__ != basetype.__repr__:
> 595 # If the subclass provides its own repr, use it instead.
> --> 596 return p.text(typ.__repr__(obj))
> 597
> 598 if cycle:
>
> ~\Anaconda3\lib\site-packages\geojson\base.py in __repr__(self)
> 25
> 26 def __repr__(self):
> ---> 27 return geojson.dumps(self, sort_keys=True)
> 28
> 29 __str__ = __repr__
>
> ~\Anaconda3\lib\site-packages\geojson\codec.py in dumps(obj, cls,
> allow_nan, **kwargs)
> 30 def dumps(obj, cls=GeoJSONEncoder, allow_nan=False, **kwargs):
> 31 return json.dumps(to_mapping(obj),
> ---> 32 cls=cls, allow_nan=allow_nan, **kwargs)
> 33
> 34
>
> ~\Anaconda3\lib\json\__init__.py in dumps(obj, skipkeys, ensure_ascii,
> check_circular, allow_nan, cls, indent, separators, default,
> sort_keys, **kw)
> 236 check_circular=check_circular, allow_nan=allow_nan, indent=indent,
> 237 separators=separators, default=default, sort_keys=sort_keys,
> --> 238 **kw).encode(obj)
> 239
> 240
>
> ~\Anaconda3\lib\json\encoder.py in encode(self, o)
> 197 # exceptions aren't as detailed. The list call should be roughly
> 198 # equivalent to the PySequence_Fast that ''.join() would do.
> --> 199 chunks = self.iterencode(o, _one_shot=True)
> 200 if not isinstance(chunks, (list, tuple)):
> 201 chunks = list(chunks)
>
> ~\Anaconda3\lib\json\encoder.py in iterencode(self, o, _one_shot)
> 255 self.key_separator, self.item_separator, self.sort_keys,
> 256 self.skipkeys, _one_shot)
> --> 257 return _iterencode(o, 0)
> 258
> 259 def _make_iterencode(markers, _default, _encoder, _indent, _floatstr,
>
> ValueError: Out of range float values are not JSON compliant
你的数据框中有 NaNs 吗?如果是这样,这个 issue 似乎是相关的。如果没有看到相关数据框的内容,我很难说出到底出了什么问题,但一个可能的解决方法是在调用 [=17 之前删除任何 NaNs 或其他不可序列化的值=]().
好吧,我得到了我的问题的正确答案当然我删除了所有 NAN 值但我的数据框中仍然有 inf
值,所以按照某人的指示我试图找到整个描述列如
df['column'].describe()
这一行给出了最小值、最大值、平均标准差和其他值,所以我的最大值将变为 inf,所以我使用以下命令删除了这个 inf 值并且它起作用了
df = df[~df.isin([np.nan, np.inf, -np.inf]).any(1)]
这解决了我的问题。