Python 无法使用resample.ohlc()方法-DataError:没有要聚合的数字类型
我接收到股票的第二次滴答声,并将它们存储在一个数据框中。我需要对它们进行重采样,得到一分钟的ohlc值。这是我的密码:Python 无法使用resample.ohlc()方法-DataError:没有要聚合的数字类型,python,pandas,dataframe,resampling,ohlc,Python,Pandas,Dataframe,Resampling,Ohlc,我接收到股票的第二次滴答声,并将它们存储在一个数据框中。我需要对它们进行重采样,得到一分钟的ohlc值。这是我的密码: def on_ticks(ws, ticks): global time_second, df_cols, tick_cols, data_frame for company_data in ticks: ltp = company_data['last_price'] timestamp = company_data['
def on_ticks(ws, ticks):
global time_second, df_cols, tick_cols, data_frame
for company_data in ticks:
ltp = company_data['last_price']
timestamp = company_data['timestamp']
lowest_sell = company_data['depth']['sell'][0]['price']
highest_buy = company_data['depth']['buy'][0]['price']
data = [timestamp, ltp, lowest_sell, highest_buy]
tick_df = pd.DataFrame([data], columns=tick_cols)
#print(tick_df)
data_frame = pd.concat([data_frame, tick_df], axis=0, sort=True, ignore_index='true')
#print("time_second is ", time_second)
if time_second > timestamp.second:
#print("now we will print data_frame")
#print(data_frame)
print("Resampling dataframe & Calculating the EMAs............")
resamp_df = data_frame.resample('1T', on='Timestamp').ohlc()
当我运行此代码时,它会触发以下错误DataError:没有要聚合的数字类型:
---------------------------------------------------------------------------
DataError Traceback (most recent call last)
<ipython-input-8-166d9105fb91> in <module>
----> 1 resamp = df.resample('1T', on='Timestamp').ohlc()
~\Anaconda3\lib\site-packages\pandas\core\resample.py in g(self, _method, *args, **kwargs)
904 def g(self, _method=method, *args, **kwargs):
905 nv.validate_resampler_func(_method, args, kwargs)
--> 906 return self._downsample(_method)
907
908 g.__doc__ = getattr(GroupBy, method).__doc__
~\Anaconda3\lib\site-packages\pandas\core\resample.py in _downsample(self, how, **kwargs)
1068 # we are downsampling
1069 # we want to call the actual grouper method here
-> 1070 result = obj.groupby(self.grouper, axis=self.axis).aggregate(how, **kwargs)
1071
1072 result = self._apply_loffset(result)
~\Anaconda3\lib\site-packages\pandas\core\groupby\generic.py in aggregate(self, arg, *args, **kwargs)
1453 @Appender(_shared_docs["aggregate"])
1454 def aggregate(self, arg=None, *args, **kwargs):
-> 1455 return super().aggregate(arg, *args, **kwargs)
1456
1457 agg = aggregate
~\Anaconda3\lib\site-packages\pandas\core\groupby\generic.py in aggregate(self, func, *args, **kwargs)
227 func = _maybe_mangle_lambdas(func)
228
--> 229 result, how = self._aggregate(func, _level=_level, *args, **kwargs)
230 if how is None:
231 return result
~\Anaconda3\lib\site-packages\pandas\core\base.py in _aggregate(self, arg, *args, **kwargs)
354
355 if isinstance(arg, str):
--> 356 return self._try_aggregate_string_function(arg, *args, **kwargs), None
357
358 if isinstance(arg, dict):
~\Anaconda3\lib\site-packages\pandas\core\base.py in _try_aggregate_string_function(self, arg, *args, **kwargs)
303 if f is not None:
304 if callable(f):
--> 305 return f(*args, **kwargs)
306
307 # people may try to aggregate on a non-callable attribute
~\Anaconda3\lib\site-packages\pandas\core\groupby\groupby.py in ohlc(self)
1438 """
1439
-> 1440 return self._apply_to_column_groupbys(lambda x: x._cython_agg_general("ohlc"))
1441
1442 @Appender(DataFrame.describe.__doc__)
~\Anaconda3\lib\site-packages\pandas\core\groupby\generic.py in _apply_to_column_groupbys(self, func)
1579 (func(col_groupby) for _, col_groupby in self._iterate_column_groupbys()),
1580 keys=self._selected_obj.columns,
-> 1581 axis=1,
1582 )
1583
~\Anaconda3\lib\site-packages\pandas\core\reshape\concat.py in concat(objs, axis, join, join_axes, ignore_index, keys, levels, names, verify_integrity, sort, copy)
253 verify_integrity=verify_integrity,
254 copy=copy,
--> 255 sort=sort,
256 )
257
~\Anaconda3\lib\site-packages\pandas\core\reshape\concat.py in __init__(self, objs, axis, join, join_axes, keys, levels, names, ignore_index, verify_integrity, copy, sort)
299 objs = [objs[k] for k in keys]
300 else:
--> 301 objs = list(objs)
302
303 if len(objs) == 0:
~\Anaconda3\lib\site-packages\pandas\core\groupby\generic.py in <genexpr>(.0)
1577
1578 return concat(
-> 1579 (func(col_groupby) for _, col_groupby in self._iterate_column_groupbys()),
1580 keys=self._selected_obj.columns,
1581 axis=1,
~\Anaconda3\lib\site-packages\pandas\core\groupby\groupby.py in <lambda>(x)
1438 """
1439
-> 1440 return self._apply_to_column_groupbys(lambda x: x._cython_agg_general("ohlc"))
1441
1442 @Appender(DataFrame.describe.__doc__)
~\Anaconda3\lib\site-packages\pandas\core\groupby\groupby.py in _cython_agg_general(self, how, alt, numeric_only, min_count)
886
887 if len(output) == 0:
--> 888 raise DataError("No numeric types to aggregate")
889
890 return self._wrap_aggregated_output(output, names)
DataError: No numeric types to aggregate
---------------------------------------------------------------------------
数据错误回溯(最近一次呼叫上次)
在里面
---->1 resamp=df.resample('1T',on='Timestamp').ohlc()
~\Anaconda3\lib\site packages\pandas\core\resample.py in g(self,_方法,*args,**kwargs)
904 def g(self,_method=method,*args,**kwargs):
905 nv.验证重采样器功能(_方法,参数,kwargs)
-->906返回自下采样(_方法)
907
908 g.。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu=getattr(GroupBy,method)。\uuuuuuuuuu doc__
~\Anaconda3\lib\site packages\pandas\core\resample.py in_downsample(self,how,**kwargs)
1068#我们正在进行下采样
1069#我们想在这里调用实际的grouper方法
->1070 result=obj.groupby(self.grouper,axis=self.axis).聚合(how,**kwargs)
1071
1072结果=self.\u apply\u loffset(结果)
聚合中的~\Anaconda3\lib\site packages\pandas\core\groupby\generic.py(self、arg、*args、**kwargs)
1453@Appender(_shared_docs[“聚合”])
1454 def聚合(自身,参数=无,*args,**kwargs):
->1455 return super().聚合(arg、*args、**kwargs)
1456
1457 agg=骨料
聚合中的~\Anaconda3\lib\site packages\pandas\core\groupby\generic.py(self、func、*args、**kwargs)
227 func=\u maggle\u lambdas(func)
228
-->229结果,how=self.\u聚合(func,\u level=\u level,*args,**kwargs)
230如果没有:
231返回结果
聚合中的~\Anaconda3\lib\site packages\pandas\core\base.py(self、arg、*args、**kwargs)
354
355如果存在(arg,str):
-->356返回self.\u try\u aggregate\u string\u函数(arg、*args、**kwargs),无
357
358如果存在(arg,dict):
函数中的~\Anaconda3\lib\site packages\pandas\core\base.py(self、arg、*args、**kwargs)
303如果f不是无:
304如果可调用(f):
-->305返回f(*args,**kwargs)
306
307#人们可能会尝试使用不可调用的属性进行聚合
ohlc中的~\Anaconda3\lib\site packages\pandas\core\groupby\groupby.py(self)
1438 """
1439
->1440返回self.\u应用于\u列\u groupby(lambda x:x.\u cython\u agg\u general(“ohlc”))
1441
1442@Appender(数据帧描述文件)
~\Anaconda3\lib\site packages\pandas\core\groupby\generic.py in\u apply\u to\u column\u groupby(self,func)
1579(func(col_groupby)for uu,col_groupby in self._iterate_column_groupby()),
1580个键=自选择对象列,
->1581轴=1,
1582 )
1583
concat中的~\Anaconda3\lib\site packages\pandas\core\reforme\concat.py(对象、轴、连接、连接轴、忽略索引、键、级别、名称、验证完整性、排序、复制)
253验证完整性=验证完整性,
254复制=复制,
-->255排序=排序,
256 )
257
~\Anaconda3\lib\site packages\pandas\core\reforme\concat.py in\uuuuuu init\uuuu(self、objs、axis、join、join\u axes、键、级别、名称、忽略索引、验证完整性、复制、排序)
299 objs=[objs[k]代表k键]
300其他:
-->301 objs=列表(objs)
302
303如果len(objs)==0:
(.0)中的~\Anaconda3\lib\site packages\pandas\core\groupby\generic.py
1577
1578返回concat(
->1579(func(col_groupby)for uu,col_groupby in self._iterate_column_groupby()),
1580个键=自选择对象列,
1581轴=1,
~(x)中的~\Anaconda3\lib\site packages\pandas\core\groupby\groupby.py
1438 """
1439
->1440返回self.\u应用于\u列\u groupby(lambda x:x.\u cython\u agg\u general(“ohlc”))
1441
1442@Appender(数据帧描述文件)
~\Anaconda3\lib\site packages\pandas\core\groupby\groupby.py in\u cython\u agg\u general(self、how、alt、numeric\u only、min\u count)
886
887如果len(输出)==0:
-->888 raise DATABERROR(“没有要聚合的数字类型”)
889
890返回自包装聚合输出(输出,名称)
DataError:没有要聚合的数字类型
有人能帮我找出哪里出错了吗?问题是时间戳中没有数字列,只有日期时间
我认为您可以创建
DatetimeIndex
,然后将所有列转换为float
s,还需要在重采样中删除上的参数:
resamp_df = data_frame.set_index('Timestamp').astype(float).resample('1T').ohlc()
另一个想法(如果使用标量)是将标量转换为浮点:
for company_data in ticks:
ltp = float(company_data['last_price'])
timestamp = company_data['timestamp']
lowest_sell = float(company_data['depth']['sell'][0]['price'])
highest_buy = float(company_data['depth']['buy'][0]['price'])