python - 无法使用 resample.ohlc() 方法 - DataError : No numeric types to aggregate

标签 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['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

谁能帮我找出哪里出错了?

最佳答案

问题是 Timestamp 中没有数字列,只有日期时间。

<小时/>

我认为您可以创建DatetimeIndex,然后将所有列转换为float,还需要在resample中删除参数on :

resamp_df = data_frame.set_index('Timestamp').astype(float).resample('1T').ohlc()
<小时/>

另一个想法(如果使用标量)是将它们转换为 float :

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'])

关于python - 无法使用 resample.ohlc() 方法 - DataError : No numeric types to aggregate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58618885/

相关文章:

python pandas如何通过其他数据框扩展数据框

python - 如何处理列名和创建新列

python - 如何调整行或列中的具体数据?

python - 从 pandas 中获取多维数组

python - 如何计算列表中值 block 的大小?

python - 在 Pandas 中查询 HDF5

python - 如何在运行时在 Django 中添加动态字段

python - 单击时从 Django 模板调用对象的方法

python - 一维和二维数组上的 numpy 点

python - 使用 VisualStudio 的 Python "Sent to Interactive"时如何查看 Locals、Watch 或 AutoWatch 中的所有变量