0

我想使用 jupyter 笔记本在开普勒 gl 地图上可视化数据。我从 xlsx 文件导入数据并选择了一张纸(一个 DataFrame 对象)。之后,我将此数据添加到开普勒地图并得到了错误: ValueError: NaTType does not support strftime

sales_sheets2 = pd.read_excel("Sales_with_coordinates.xlsx", sheet_name=None)
data = sales_sheets2['Feb 2014']

from keplergl import KeplerGl
map_2 = KeplerGl(height=400)
map_2.add_data(data=data, name='data_1')
map_2

如何解决这个问题呢 ?Pandas DataFrame 有问题吗?我发现了几篇关于这个错误的文章,但它们都与将日历数据转换为不同的格式有关,但我不明白这在 Kepler 中是如何工作的。

这是追溯

User Guide: https://docs.kepler.gl/docs/keplergl-jupyter
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-13-f3128ba8751f> in <module>
      1 from keplergl import KeplerGl
      2 map_2 = KeplerGl(height=400)
----> 3 map_2.add_data(data=a, name='data_1')
      4 map_2

~/Anaconda3/lib/python3.8/site-packages/keplergl/keplergl.py in add_data(self, data, name)
    134         copy.update({name: normalized})
    135 
--> 136         self.data = copy
    137 
    138     def _repr_html_(self, data=None, config=None, read_only=False, center_map=False):

~/Anaconda3/lib/python3.8/site-packages/traitlets/traitlets.py in __set__(self, obj, value)
    602             raise TraitError('The "%s" trait is read-only.' % self.name)
    603         else:
--> 604             self.set(obj, value)
    605 
    606     def _validate(self, obj, value):

~/Anaconda3/lib/python3.8/site-packages/traitlets/traitlets.py in set(self, obj, value)
    591             # we explicitly compare silent to True just in case the equality
    592             # comparison above returns something other than True/False
--> 593             obj._notify_trait(self.name, old_value, new_value)
    594 
    595     def __set__(self, obj, value):

~/Anaconda3/lib/python3.8/site-packages/traitlets/traitlets.py in _notify_trait(self, name, old_value, new_value)
   1215 
   1216     def _notify_trait(self, name, old_value, new_value):
-> 1217         self.notify_change(Bunch(
   1218             name=name,
   1219             old=old_value,

~/Anaconda3/lib/python3.8/site-packages/ipywidgets/widgets/widget.py in notify_change(self, change)
    603             if name in self.keys and self._should_send_property(name, getattr(self, name)):
    604                 # Send new state to front-end
--> 605                 self.send_state(key=name)
    606         super(Widget, self).notify_change(change)
    607 

~/Anaconda3/lib/python3.8/site-packages/ipywidgets/widgets/widget.py in send_state(self, key)
    487             state, buffer_paths, buffers = _remove_buffers(state)
    488             msg = {'method': 'update', 'state': state, 'buffer_paths': buffer_paths}
--> 489             self._send(msg, buffers=buffers)
    490 
    491 

~/Anaconda3/lib/python3.8/site-packages/ipywidgets/widgets/widget.py in _send(self, msg, buffers)
    735         """Sends a message to the model in the front-end."""
    736         if self.comm is not None and self.comm.kernel is not None:
--> 737             self.comm.send(data=msg, buffers=buffers)
    738 
    739     def _repr_keys(self):

~/Anaconda3/lib/python3.8/site-packages/ipykernel/comm/comm.py in send(self, data, metadata, buffers)
    120     def send(self, data=None, metadata=None, buffers=None):
    121         """Send a message to the frontend-side version of this comm"""
--> 122         self._publish_msg('comm_msg',
    123             data=data, metadata=metadata, buffers=buffers,
    124         )

~/Anaconda3/lib/python3.8/site-packages/ipykernel/comm/comm.py in _publish_msg(self, msg_type, data, metadata, buffers, **keys)
     63         data = {} if data is None else data
     64         metadata = {} if metadata is None else metadata
---> 65         content = json_clean(dict(data=data, comm_id=self.comm_id, **keys))
     66         self.kernel.session.send(self.kernel.iopub_socket, msg_type,
     67             content,

~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py in json_clean(obj)
    189         out = {}
    190         for k,v in iteritems(obj):
--> 191             out[unicode_type(k)] = json_clean(v)
    192         return out
    193     if isinstance(obj, datetime):

~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py in json_clean(obj)
    189         out = {}
    190         for k,v in iteritems(obj):
--> 191             out[unicode_type(k)] = json_clean(v)
    192         return out
    193     if isinstance(obj, datetime):

~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py in json_clean(obj)
    189         out = {}
    190         for k,v in iteritems(obj):
--> 191             out[unicode_type(k)] = json_clean(v)
    192         return out
    193     if isinstance(obj, datetime):

~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py in json_clean(obj)
    189         out = {}
    190         for k,v in iteritems(obj):
--> 191             out[unicode_type(k)] = json_clean(v)
    192         return out
    193     if isinstance(obj, datetime):

~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py in json_clean(obj)
    189         out = {}
    190         for k,v in iteritems(obj):
--> 191             out[unicode_type(k)] = json_clean(v)
    192         return out
    193     if isinstance(obj, datetime):

~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py in json_clean(obj)
    175 
    176     if isinstance(obj, list):
--> 177         return [json_clean(x) for x in obj]
    178 
    179     if isinstance(obj, dict):

~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py in <listcomp>(.0)
    175 
    176     if isinstance(obj, list):
--> 177         return [json_clean(x) for x in obj]
    178 
    179     if isinstance(obj, dict):

~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py in json_clean(obj)
    175 
    176     if isinstance(obj, list):
--> 177         return [json_clean(x) for x in obj]
    178 
    179     if isinstance(obj, dict):

~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py in <listcomp>(.0)
    175 
    176     if isinstance(obj, list):
--> 177         return [json_clean(x) for x in obj]
    178 
    179     if isinstance(obj, dict):

~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py in json_clean(obj)
    192         return out
    193     if isinstance(obj, datetime):
--> 194         return obj.strftime(ISO8601)
    195 
    196     # we don't understand it, it's probably an unserializable object

pandas/_libs/tslibs/nattype.pyx in pandas._libs.tslibs.nattype._make_error_func.f()

ValueError: NaTType does not support strftime
4

1 回答 1

0

解决了 !我刚刚删除了所有 Na 值,使用data = data.dropna()

于 2021-06-02T11:57:53.657 回答