プログラミング初学者です。
質問の仕方等、至らない点があるとは思いますが、多めに見ていただけると幸いです。
↓以下本文です。
為替レートのローソク足(始値、高値、安値、終値)から任意の時間(5分、10分等)でデータを抽出したく、下記のようにコードを組みました。
OHLC(始値、高値、安値、終値)のデータフレームは作成できたのですが、
def文で関数を定義するとうまく実行されません、、
エラー内容としましてはDataErrorが出力されており、
これはdataM1のデータフレームの作成方法に誤りがあるということなのでしょうか。
それとも関数定義の仕方が間違っているのでしょうか。
以下に参考にしたページを載せさせて頂きました。
詳しい方、ご教示頂けないでしょうか。
よろしくお願いいたします。
以下、ppaulさんに回答頂いた内容について実践してみた内容となります。
どこかに数字ではないデータが入っている可能性があるということで、
ppaulさんに私的頂いたdtypeにてデータ型の確認を行ったところ、
以下のような結果が得られました。
python
1print(dataM1['Open'].dtype) 2print(dataM1['High'].dtype) 3print(dataM1['Low'].dtype) 4print(dataM1['Close'].dtype) 5print(dataM1['A'].dtype) 6print(dataM1['f'].dtype) 7 8float64 9float64 10float64 11float64 12object 13int64
この結果より、Aの列に数字でないデータが入っている可能性があるということで、
ヒストリカルデータを別のサイトから取得し、同様に実行してみました。
参照データ
以下dtypeでの実行結果です。
python
1print(dataM1['Open'].dtype) 2print(dataM1['High'].dtype) 3print(dataM1['Low'].dtype) 4print(dataM1['Close'].dtype) 5print(dataM1['A'].dtype) 6print(dataM1['f'].dtype) 7 8float64 9float64 10float64 11float64 12object 13int64
やはりAの列でobjectが表示されてしまいます。
(無料ダウンロードのデータだと効率よく使用できないようになっている、、?
python
1#pandasとnumpyをインポート 2import pandas as pd 3import numpy as np 4 5#OHLCのデータフレーム作成 6dataM1 = pd.read_csv('data.csv' , names = ('A','Open','High','Low','Close','F')) 7dataM1.index = pd.to_datetime(pd.Series(dataM1.index)+' '+dataM1.reset_index()['A']) 8dataM1.index.name = 'Time' 9dataM1.drop(['A','F'] , axis=1).head() 10 11#マルチタイムフレームの作成 12def make_mtf_ohlc(dataM1, tf): 13 x = dataM1.resample(tf).ohlc() 14 O = x['Open']['open'] 15 H = x['High']['high'] 16 L = x['Low']['low'] 17 C = x['Close']['close'] 18 ret = pd.DataFrame({'Open': O, 'High': H, 'Low': L, 'Close': C}, 19 columns=['Open','High','Low','Close']) 20 return ret.dropna() 21 22ohlc_1h = make_mtf_ohlc(dataM1, '1H') 23ohlc_1h 24 25#エラー内容 26DataError Traceback (most recent call last) 27<ipython-input-4-5bc21324f74e> in <module> 28 9 return ret.dropna() 29 10 30---> 11 ohlc_1h = make_mtf_ohlc(dataM1, '1H') 31 12 ohlc_1h 32 33<ipython-input-4-5bc21324f74e> in make_mtf_ohlc(dataM1, tf) 34 1 def make_mtf_ohlc(dataM1, tf): 35----> 2 x = dataM1.resample(tf).ohlc() 36 3 O = x['Open']['open'] 37 4 H = x['High']['high'] 38 5 L = x['Low']['low'] 39 40~/anaconda3/lib/python3.7/site-packages/pandas/core/resample.py in f(self, _method, *args, **kwargs) 41 863 def f(self, _method=method, *args, **kwargs): 42 864 nv.validate_resampler_func(_method, args, kwargs) 43--> 865 return self._downsample(_method) 44 866 f.__doc__ = getattr(GroupBy, method).__doc__ 45 867 setattr(Resampler, method, f) 46 47~/anaconda3/lib/python3.7/site-packages/pandas/core/resample.py in _downsample(self, how, **kwargs) 48 1018 # we want to call the actual grouper method here 49 1019 result = obj.groupby( 50-> 1020 self.grouper, axis=self.axis).aggregate(how, **kwargs) 51 1021 52 1022 result = self._apply_loffset(result) 53 54~/anaconda3/lib/python3.7/site-packages/pandas/core/groupby/generic.py in aggregate(self, arg, *args, **kwargs) 55 1313 @Appender(_shared_docs['aggregate']) 56 1314 def aggregate(self, arg, *args, **kwargs): 57-> 1315 return super(DataFrameGroupBy, self).aggregate(arg, *args, **kwargs) 58 1316 59 1317 agg = aggregate 60 61~/anaconda3/lib/python3.7/site-packages/pandas/core/groupby/generic.py in aggregate(self, arg, *args, **kwargs) 62 184 63 185 _level = kwargs.pop('_level', None) 64--> 186 result, how = self._aggregate(arg, _level=_level, *args, **kwargs) 65 187 if how is None: 66 188 return result 67 68~/anaconda3/lib/python3.7/site-packages/pandas/core/base.py in _aggregate(self, arg, *args, **kwargs) 69 354 if isinstance(arg, compat.string_types): 70 355 return self._try_aggregate_string_function(arg, *args, 71--> 356 **kwargs), None 72 357 73 358 if isinstance(arg, dict): 74 75~/anaconda3/lib/python3.7/site-packages/pandas/core/base.py in _try_aggregate_string_function(self, arg, *args, **kwargs) 76 310 if f is not None: 77 311 if callable(f): 78--> 312 return f(*args, **kwargs) 79 313 80 314 # people may try to aggregate on a non-callable attribute 81 82~/anaconda3/lib/python3.7/site-packages/pandas/core/groupby/groupby.py in ohlc(self) 83 1317 84 1318 return self._apply_to_column_groupbys( 85-> 1319 lambda x: x._cython_agg_general('ohlc')) 86 1320 87 1321 @Appender(DataFrame.describe.__doc__) 88 89~/anaconda3/lib/python3.7/site-packages/pandas/core/groupby/generic.py in _apply_to_column_groupbys(self, func) 90 1490 (func(col_groupby) for _, col_groupby 91 1491 in self._iterate_column_groupbys()), 92-> 1492 keys=self._selected_obj.columns, axis=1) 93 1493 94 1494 def _fill(self, direction, limit=None): 95 96~/anaconda3/lib/python3.7/site-packages/pandas/core/reshape/concat.py in concat(objs, axis, join, join_axes, ignore_index, keys, levels, names, verify_integrity, sort, copy) 97 226 keys=keys, levels=levels, names=names, 98 227 verify_integrity=verify_integrity, 99--> 228 copy=copy, sort=sort) 100 229 return op.get_result() 101 230 102 103~/anaconda3/lib/python3.7/site-packages/pandas/core/reshape/concat.py in __init__(self, objs, axis, join, join_axes, keys, levels, names, ignore_index, verify_integrity, copy, sort) 104 257 objs = [objs[k] for k in keys] 105 258 else: 106--> 259 objs = list(objs) 107 260 108 261 if len(objs) == 0: 109 110~/anaconda3/lib/python3.7/site-packages/pandas/core/groupby/generic.py in <genexpr>(.0) 111 1488 from pandas.core.reshape.concat import concat 112 1489 return concat( 113-> 1490 (func(col_groupby) for _, col_groupby 114 1491 in self._iterate_column_groupbys()), 115 1492 keys=self._selected_obj.columns, axis=1) 116 117~/anaconda3/lib/python3.7/site-packages/pandas/core/groupby/groupby.py in <lambda>(x) 118 1317 119 1318 return self._apply_to_column_groupbys( 120-> 1319 lambda x: x._cython_agg_general('ohlc')) 121 1320 122 1321 @Appender(DataFrame.describe.__doc__) 123 124~/anaconda3/lib/python3.7/site-packages/pandas/core/groupby/groupby.py in _cython_agg_general(self, how, alt, numeric_only, min_count) 125 836 126 837 if len(output) == 0: 127--> 838 raise DataError('No numeric types to aggregate') 128 839 129 840 return self._wrap_aggregated_output(output, names) 130 131DataError: No numeric types to aggregate
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/03 09:11
2021/05/03 14:52
2021/05/05 04:07