Python 在jupyter笔记本中可视化开普勒gl中的数据时出错

Python 在jupyter笔记本中可视化开普勒gl中的数据时出错,python,jupyter-notebook,jupyter,kepler,Python,Jupyter Notebook,Jupyter,Kepler,我想使用jupyter笔记本在开普勒gl地图上可视化数据。 我从一个xlsx文件导入了数据,并选择了一个工作表(DataFrame对象)。 之后,我将这些数据添加到开普勒地图中,并得到一个错误: ValueError:NaTType不支持strftime sales_sheets2 = pd.read_excel("Sales_with_coordinates.xlsx", sheet_name=None) data = sales_sheets2['Feb 2014']

我想使用jupyter笔记本在开普勒gl地图上可视化数据。 我从一个xlsx文件导入了数据,并选择了一个工作表(DataFrame对象)。 之后,我将这些数据添加到开普勒地图中,并得到一个错误:
ValueError:NaTType不支持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
如何解决这个问题? 熊猫数据帧有问题吗? 我找到了几篇关于这个错误的文章,但它们都与将日历数据转换为不同的格式有关,但我不明白这在开普勒是如何工作的

这是回溯

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
用户指南:https://docs.kepler.gl/docs/keplergl-jupyter
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
1从开普勒导入开普勒
2地图2=开普勒(高度=400)
---->3映射2.添加数据(data=a,name='data\u 1')
4地图2
添加数据中的~/Anaconda3/lib/python3.8/site-packages/keplergl/keplergl.py(self、data、name)
134 copy.update({name:normalized})
135
-->136 self.data=复制
137
138 def_repr_html_(self,data=None,config=None,read\u only=False,center\u map=False):
~/Anaconda3/lib/python3.8/site-packages/traitlets/traitlets.py在集合中(self,obj,value)
602错误(“%s”特征是只读的。%self.name)
603其他:
-->604自设置(对象,值)
605
606 def_验证(自身、对象、值):
集合中的~/Anaconda3/lib/python3.8/site-packages/traitlets/traitlets.py(self、obj、value)
591#我们明确地将沉默与真实进行比较,以防相等
592#上面的比较返回的不是真/假
-->593对象通知特征(自我名称、旧值、新值)
594
595定义设置(自身、对象、值):
~/Anaconda3/lib/python3.8/site-packages/traitlets/traitlets.py in\u notify\u trait(自我、姓名、旧值、新值)
1215
1216定义通知特征(自我、姓名、旧值、新值):
->1217自我通知变更(束)(
1218 name=名称,
1219旧=旧值,
更改通知中的~/Anaconda3/lib/python3.8/site-packages/ipywidgets/widgets/widget.py(self,change)
603如果名称在self.keys和self.\u应发送\u属性(name,getattr(self,name)):
604#将新状态发送到前端
-->605自发送状态(键=名称)
606超级(小部件,自我)。通知变更(变更)
607
~/Anaconda3/lib/python3.8/site-packages/ipywidgets/widgets/widget.py处于发送状态(self,key)
487状态,缓冲区路径,缓冲区=\u删除\u缓冲区(状态)
488 msg={'method':'update','state':state','buffer_path':buffer_path}
-->489自发送(消息,缓冲区=缓冲区)
490
491
发送中的~/Anaconda3/lib/python3.8/site-packages/ipywidgets/widgets/widget.py(self、msg、buffers)
735“向前端中的模型发送消息。”“”
736如果self.comm不是None且self.comm.kernel不是None:
-->737 self.comm.send(数据=消息,缓冲区=缓冲区)
738
739 def_repr_键(自):
发送中的~/Anaconda3/lib/python3.8/site-packages/ipykernel/comm/comm.py(自身、数据、元数据、缓冲区)
120 def发送(自身,数据=无,元数据=无,缓冲区=无):
121“向该通信的前端版本发送消息”
-->122自我发布消息(“通信消息”,
123数据=数据,元数据=元数据,缓冲区=缓冲区,
124         )
~/Anaconda3/lib/python3.8/site-packages/ipykernel/comm/comm.py in\u publish\u msg(self、msg\u类型、数据、元数据、缓冲区、**键)
63 data={}如果数据不是其他数据
64元数据={}如果元数据不是其他元数据
--->65 content=json_clean(dict(data=data,comm_id=self.comm_id,**键))
66 self.kernel.session.send(self.kernel.iopub_套接字,msg_类型,
67内容,
json_clean(obj)中的~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py
189 out={}
190适用于iteritems(obj)中的k、v:
-->191 out[unicode_type(k)]=json_clean(v)
192返回
193如果存在(obj,日期时间):
json_clean(obj)中的~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py
189 out={}
190适用于iteritems(obj)中的k、v:
-->191 out[unicode_type(k)]=json_clean(v)
192返回
193如果存在(obj,日期时间):
json_clean(obj)中的~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py
189 out={}
190适用于iteritems(obj)中的k、v:
-->191 out[unicode_type(k)]=json_clean(v)
192返回
193如果存在(obj,日期时间):
json_clean(obj)中的~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py
189 out={}
190适用于iteritems(obj)中的k、v:
-->191 out[unicode_type(k)]=json_clean(v)
192返回
193如果存在(obj,日期时间):
json_clean(obj)中的~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py
189 out={}
190适用于iteritems(obj)中的k、v:
-->191 out[unicode_type(k)]=json_clean(v)
192返回
193如果存在(obj,日期时间):
json_clean(obj)中的~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py
175
176如果存在(obj,列表):
-->177返回[json_clean(x)表示obj中的x]
178
179如果存在(obj,dict):
~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py in(.0)
175
176如果存在(obj,列表):
-->177返回[json_clean(x)表示obj中的x]
178
179如果存在(obj,dict):
json_clean(obj)中的~/Anaconda3/lib/python3.8/site-packages/ipykernel/jsonutil.py
175
176