0

オンラインで見つけたコードを平金足ろうそくに適応させようとしていました

コードは次のとおりです。

def heikin_ashi(self, df):
    heikin_ashi_df = pd.DataFrame(index=df.index.values, columns=['HE_Open', 'HE_High', 'HE_Low', 'HE_Close'])

    heikin_ashi_df['HE_Close'] = (df['Open'] + df['High'] + df['Low'] + df['Close']) / 4

    for i in range(len(df)):
        if i == 0:
            heikin_ashi_df.iat[0, 0] = df['Open'].iloc[0]
        else:
            heikin_ashi_df.iat[i, 0] = (heikin_ashi_df.iat[i - 1, 0] + heikin_ashi_df.iat[i - 1, 3]) / 2

    heikin_ashi_df['HE_High'] = heikin_ashi_df.loc[:, ['HE_Open', 'HE_Close']].join(df['High']).max(axis=1)

    heikin_ashi_df['HE_Low'] = heikin_ashi_df.loc[:, ['HE_Open', 'HE_Close']].join(df['Low']).min(axis=1)

    return heikin_ashi_df

しかし、このメソッドは新しい pandas テーブルを返し、既存のテーブルに新しい行を追加したかっただけです

これは私の試みです:

def heikin_ashi_full(self, df):

    df.append(pd.Series(name='HE_Open', dtype=float))
    df.append(pd.Series(name='HE_High', dtype=float))
    df.append(pd.Series(name='HE_Low', dtype=float))
    df.append(pd.Series(name='HE_Close', dtype=float))
    df['HE_Close'] = (df['Open'] + df['High'] + df['Low'] + df['Close']) / 4

    for i in range(len(df)):
        if i == 0:
            df.iat[0, 0] = df['Open'].iloc[0]
        else:
            df.iat[i, 0] = (df.iat[i - 1, 0] + df.iat[i - 1, 3]) / 2

    df['HE_High'] = df.loc[:, ['HE_Open', 'HE_Close', 'High']].max(axis=1)

    df['HE_Low'] = df.loc[:, ['HE_Open', 'HE_Close', 'Low']].min(axis=1)

    return df

残念ながら、メソッドはメソッドの 15 行目でクラッシュします

df['HE_High'] = df.loc[:, ['HE_Open', 'HE_Close', 'High']].max(軸=1)

トレースバックはここに示されています:

トレースバック

メイン テーブルは、次のようなデータを含むファイルから作成されます。

Date,Open,High,Low,Close,Volume,OpenInterest
2020-08-25 06:00,15.12,15.25,14.82,15.05,3824776,0.0
2020-08-26 06:00,15.09,15.44,15.02,15.07,5933882,0.0
2020-08-27 06:00,15.22,15.33,14.672,14.84,5728962,0.0
2020-08-28 06:00,15.01,15.18,14.8605,15.12,5992532,0.0
2020-08-31 06:00,15.23,15.23,14.62,14.62,7000994,0.0
2020-09-01 06:00,14.64,15.18,14.24,15.08,7347598,0.0

興味深いことに、私がインターネットから得た最初の方法は問題なく動作し、正確であるようです。私はパンダに慣れていないため、どのように間違ったのか、修正を見つけることができませんでした。どうぞよろしくお願いいたします。

4

1 に答える 1