Python 3:“;TypeError:无法键入从[datetime64[ns]]到[int32]的datetimelikeJupyter笔记本
遇到了一个jupyter笔记本项目的问题,我正试图在我的Windows10机器上运行Python 3。我从这个函数中得到了提到的错误:Python 3:“;TypeError:无法键入从[datetime64[ns]]到[int32]的datetimelikeJupyter笔记本,python,python-3.x,pandas,jupyter-notebook,Python,Python 3.x,Pandas,Jupyter Notebook,遇到了一个jupyter笔记本项目的问题,我正试图在我的Windows10机器上运行Python 3。我从这个函数中得到了提到的错误: buy_per_min = (buy .groupby([pd.Grouper(key='timestamp', freq='Min'), 'price']) .shares .sum() .apply(np.log)
buy_per_min = (buy
.groupby([pd.Grouper(key='timestamp', freq='Min'), 'price'])
.shares
.sum()
.apply(np.log)
.to_frame('shares')
.reset_index('price')
.between_time(market_open, market_close)
.groupby(level='timestamp', as_index=False, group_keys=False)
.apply(lambda x: x.nlargest(columns='price', n=depth))
.reset_index())
buy_per_min.timestamp = buy_per_min.timestamp.add(utc_offset).astype(int)
buy_per_min.info()
问题出在
buy_per_min.timestamp=buy_per_min.timestamp.add(utc_offset).astype(int)
行,但我不完全理解为什么我会得到它。这是完整的回溯:
TypeError Traceback (most recent call last)
<ipython-input-28-396768b710c8> in <module>()
10 .apply(lambda x: x.nlargest(columns='price', n=depth))
11 .reset_index())
---> 12 buy_per_min.timestamp = buy_per_min.timestamp.add(utc_offset).astype(int)
13 buy_per_min.info()
~\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\generic.py in astype(self, dtype, copy, errors, **kwargs)
5689 # else, only a single dtype is given
5690 new_data = self._data.astype(dtype=dtype, copy=copy, errors=errors,
-> 5691 **kwargs)
5692 return self._constructor(new_data).__finalize__(self)
5693
~\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\internals\managers.py in astype(self, dtype, **kwargs)
529
530 def astype(self, dtype, **kwargs):
--> 531 return self.apply('astype', dtype=dtype, **kwargs)
532
533 def convert(self, **kwargs):
~\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\internals\managers.py in apply(self, f, axes, filter, do_integrity_check, consolidate, **kwargs)
393 copy=align_copy)
394
--> 395 applied = getattr(b, f)(**kwargs)
396 result_blocks = _extend_blocks(applied, result_blocks)
397
~\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\internals\blocks.py in astype(self, dtype, copy, errors, values, **kwargs)
532 def astype(self, dtype, copy=False, errors='raise', values=None, **kwargs):
533 return self._astype(dtype, copy=copy, errors=errors, values=values,
--> 534 **kwargs)
535
536 def _astype(self, dtype, copy=False, errors='raise', values=None,
~\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\internals\blocks.py in _astype(self, dtype, **kwargs)
2137
2138 # delegate
-> 2139 return super(DatetimeBlock, self)._astype(dtype=dtype, **kwargs)
2140
2141 def _can_hold_element(self, element):
~\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\internals\blocks.py in _astype(self, dtype, copy, errors, values, **kwargs)
631
632 # _astype_nansafe works fine with 1-d only
--> 633 values = astype_nansafe(values.ravel(), dtype, copy=True)
634
635 # TODO(extension)
~\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\dtypes\cast.py in astype_nansafe(arr, dtype, copy, skipna)
644 raise TypeError("cannot astype a datetimelike from [{from_dtype}] "
645 "to [{to_dtype}]".format(from_dtype=arr.dtype,
--> 646 to_dtype=dtype))
647
648 elif is_timedelta64_dtype(arr):
TypeError: cannot astype a datetimelike from [datetime64[ns]] to [int32]
TypeError回溯(最近一次调用)
在()
10.应用(lambda x:x.nlargest(columns='price',n=depth))
11.重置索引()
--->12每分钟购买时间戳=每分钟购买时间戳.add(utc\u offset).astype(int)
13每分钟购买量信息()
astype中的~\AppData\Local\Programs\Python\Python36\lib\site packages\pandas\core\generic.py(self、dtype、copy、errors、**kwargs)
5689#否则,只给出一个数据类型
5690新数据=自身。_数据.astype(dtype=dtype,copy=copy,errors=errors,
->5691**夸尔格)
5692返回self.\u构造函数(新数据)。\u完成\u(self)
5693
astype中的~\AppData\Local\Programs\Python\Python36\lib\site packages\pandas\core\internals\managers.py(self,dtype,**kwargs)
529
530 def astype(自我,数据类型,**kwargs):
-->531返回self.apply('astype',dtype=dtype,**kwargs)
532
533 def转换(自身,**kwargs):
应用中的~\AppData\Local\Programs\Python\Python36\lib\site packages\pandas\core\internals\managers.py(self、f、axes、filter、do\u integrity\u check、consolidate、**kwargs)
393拷贝=对齐(拷贝)
394
-->395应用=getattr(b,f)(**kwargs)
396结果块=\u扩展块(应用,结果块)
397
astype中的~\AppData\Local\Programs\Python\Python36\lib\site packages\pandas\core\internals\blocks.py(self、dtype、copy、errors、values、**kwargs)
532 def astype(self、dtype、copy=False、errors='raise',values=None、**kwargs):
533返回self.\u astype(数据类型,复制=复制,错误=错误,值=值,
-->534**夸尔格)
535
536 def_astype(self,dtype,copy=False,errors='raise',values=None,
~\AppData\Local\Programs\Python\Python36\lib\site packages\pandas\core\internals\blocks.py in\u astype(self,dtype,**kwargs)
2137
2138#代表
->2139返回super(DatetimeBlock,self)。\u astype(dtype=dtype,**kwargs)
2140
2141 def能保持元件(自身,元件):
~\AppData\Local\Programs\Python\Python36\lib\site packages\pandas\core\internals\blocks.py in\u astype(self、dtype、copy、errors、values、**kwargs)
631
632#u astype_nansafe仅适用于1-d
-->633 values=astype_nansafe(values.ravel(),dtype,copy=True)
634
635#待办事项(分机)
astype_nansafe中的~\AppData\Local\Programs\Python\Python36\lib\site packages\pandas\core\dtypes\cast.py(arr、dtype、copy、skipna)
644 raise TypeError(“无法从[{from\U dtype}]键入日期时间型”
645“to[{to_dtype}].”格式(from_dtype=arr.dtype,
-->646 to_dtype=dtype))
647
648 elif是\u timedelta64\u数据类型(arr):
TypeError:无法将datetimelike从[datetime64[ns]]键入到[int32]
我需要对时间戳信息进行某种转换吗?它可能是什么样子?谢谢
更新
以前也有人问过类似的问题,我已经读过了,但我不知道如何将其应用于我的问题,如果其他人知道,我希望得到解释。可以在这里找到:
熊猫无法将日期时间转换为
int32
,因此引发了错误。如果转换为np.int64
正常工作,也可以使用错误的值将numpy数组转换为int
,或转换为int64
,然后以纳秒的速度以本机格式获取日期时间:
rng = pd.date_range('2017-04-03 12:00:45', periods=3)
buy_per_min = pd.DataFrame({'timestamp': rng})
from datetime import timedelta
utc_offset = timedelta(hours=4)
print (buy_per_min.timestamp.add(utc_offset))
0 2017-04-03 16:00:45
1 2017-04-04 16:00:45
2 2017-04-05 16:00:45
Name: timestamp, dtype: datetime64[ns]
print (buy_per_min.timestamp.add(utc_offset).values)
['2017-04-03T16:00:45.000000000' '2017-04-04T16:00:45.000000000'
'2017-04-05T16:00:45.000000000']
print (buy_per_min.timestamp.add(utc_offset).values.astype(np.int64))
[1491235245000000000 1491321645000000000 1491408045000000000]
print (buy_per_min.timestamp.add(utc_offset).astype(np.int64))
0 1491235245000000000
1 1491321645000000000
2 1491408045000000000
Name: timestamp, dtype: int64
#https://stackoverflow.com/a/12716674
print (buy_per_min.timestamp.add(utc_offset).values.astype(int))
[ -289111552 -2146205184 291668480]
我刚刚谈到了一个非常类似的问题:
TypeError:无法将datetimelike从[datetime64[ns]]键入到[bool]
在我的例子中,通过添加大括号解决了问题。比较如下:
df2 = df[
(df['column1'] != df['column2']) &
df['column3'] >= '03.02.2020'
].copy()
为此:
df2 = df[
(df['column1'] != df['column2']) &
(df['column3'] >= '03.02.2020')
].copy()
在我的例子中,错误消息似乎只是由以下事实触发的:&
运算符被应用于基于日期的列column3
@jezrael,我确实看到了答案,但它没有回答我的特定问题,而且,我也不完全确定错误的含义,因此我也希望得到解释解释。另一个答案也没有解释背后的“为什么”。我希望能为我的问题找到一个解决方案,并解释为什么,以便我能从中学习。谢谢!当然,可以添加一些数据来测试你的解决方案吗?@jezrael查看此项目:…向下滚动至[102]:
在订单簿深度下查看所有内容。这是我试图在我的机器上运行的项目,但我在尝试时遇到了该错误。谢谢!太棒了!这对我解释了。谢谢你的输入!