パンダとyfinanceを使用してマルチレベルデータフレームに列を追加するにはどうすればよいですか?

raptorzee

私は以下のコードを持っています:

import yfinance as yf
import pandas as pd
import datetime as dt
end=dt.datetime.today()
start=end-dt.timedelta(59)
tickers=['WBA', 'HD']
ohlcv={}
df=pd.DataFrame
df = yf.download(tickers,group_by=tickers,start=start,end=end,interval='5m')

df['h-l']=abs(df.High-df.Low)
df['h-pc']=abs (df.High-df['Adj Close'].shift(1))
df['l-pc']=abs(df.Low-df['Adj Close'].shift(1))
df['tr']=df[['h-l','h-pc','l-pc']].max(axis=1)
df['atr']=df['tr'].rolling(window=n, min_periods=n).mean()

実行しようとすると、以下のエラーが発生します。

return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'High'

私はこのコードを使ってみました:

df = df.stack(level=0).rename_axis(['Date', 'Ticker']).reset_index(level=1)

抽出されたレポートには、ティッカー間に分離がないため、数学的なエラーがあります。

実際に必要なのは、ティッカーリストに記載されているすべてのティッカーに対して、「hl」と呼ばれる列を作成する必要があります。この列では、その行の高値をその行の低値から減算します。

トレントン・マッキニー

オプション1:マルチレベルの列名

  • タプルを渡すことにより、マルチレベルの列にアクセスします
    • df[('WMB', 'High')]
  • 使用したパッケージバージョン
    • print(pd.__version__) 少なくとも '1.0.5'
    • print(yf.__version__) です '0.1.54'
import yfinance as yf
import pandas as pd
from datetime import datetime, timedelta

end = datetime.today()
start = end - timedelta(59)
tickers = ['WBA', 'HD']

df = yf.download(tickers,group_by=tickers,start=start,end=end,interval='5m')

# iterate over level 0 ticker names
for ticker in tickers:
    df[(ticker, 'h-l')] = abs(df[(ticker, 'High')] - df[(ticker, 'Low')])
    df[(ticker, 'h-pc')] = abs(df[(ticker, 'High')] - df[(ticker, 'Adj Close')].shift(1))
    df[(ticker, 'l-pc')] = abs(df[(ticker, 'Low')] - df[(ticker, 'Adj Close')].shift(1))
    df[(ticker, 'tr')] = df[[(ticker, 'h-l'), (ticker, 'h-pc'), (ticker, 'l-pc')]].max(axis=1)
#     df[(ticker, 'atr')] = df[(ticker, 'tr')].rolling(window=n, min_periods=n).mean()  # not included becasue n is not defined

# sort the columns
df = df.reindex(sorted(df.columns), axis=1)

# display(df.head())
                                   HD                                                                                                          WBA                                                                                              
                            Adj Close       Close        High         Low        Open    Volume       h-l      h-pc      l-pc        tr  Adj Close      Close       High        Low       Open    Volume       h-l      h-pc      l-pc        tr
Datetime                                                                                                                                                                                                                                        
2020-06-08 09:30:00-04:00  253.937500  253.937500  253.960007  252.360001  252.490005  210260.0  1.600006       NaN       NaN  1.600006  46.049999  46.049999  46.070000  45.490002  45.490002  239860.0  0.579998       NaN       NaN  0.579998
2020-06-08 09:35:00-04:00  253.470001  253.470001  254.339996  253.220093  253.990005   95906.0  1.119904  0.402496  0.717407  1.119904  46.330002  46.330002  46.330002  46.040001  46.070000  104259.0  0.290001  0.280003  0.009998  0.290001
2020-06-08 09:40:00-04:00  253.580002  253.580002  253.829895  252.955002  253.429993   55868.0  0.874893  0.359894  0.514999  0.874893  46.610001  46.610001  46.660000  46.240002  46.330002  113174.0  0.419998  0.329998  0.090000  0.419998
2020-06-08 09:45:00-04:00  253.740005  253.740005  253.929993  253.289993  253.529999   61892.0  0.639999  0.349991  0.290009  0.639999  46.880001  46.880001  46.950001  46.624100  46.624100  121388.0  0.325901  0.340000  0.014099  0.340000
2020-06-08 09:50:00-04:00  253.703400  253.703400  253.910004  253.419998  253.740005   60809.0  0.490005  0.169998  0.320007  0.490005  46.919998  46.919998  46.990002  46.820000  46.880001  154239.0  0.170002  0.110001  0.060001  0.170002

オプション2:単一レベルの列名

import yfinance as yf
import pandas as pd
from datetime import datetime, timedelta

tickerStrings = ['WBA', 'HD']
df = yf.download(tickers, group_by='Ticker', start=start ,end=end, interval='5m')

# create single level column names
df = df.stack(level=0).rename_axis(['Date', 'Ticker']).reset_index(level=1)

# function with calculations
def my_calculations(df):
    df['h-l']=abs(df.High-df.Low)
    df['h-pc']=abs(df.High-df['Adj Close'].shift(1))
    df['l-pc']=abs(df.Low-df['Adj Close'].shift(1))
    df['tr']=df[['h-l','h-pc','l-pc']].max(axis=1)
#     df['atr']=df['tr'].rolling(window=n, min_periods=n).mean()  # n is not defined in the question
    return df

# apply the function
df_updated = df.reset_index().groupby('Ticker').apply(my_calculations).sort_values(['Ticker', 'Date'])

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

反復を使用してマルチレベルのパンダデータフレームに追加するにはどうすればよいですか?

分類Dev

Pythonを使用してデータフレーム内のマルチレベル列の位置を変更するにはどうすればよいですか?

分類Dev

パンダでマルチレベルのデータフレームを作成するにはどうすればよいですか?

分類Dev

フィールドとしてリストを含むパンダデータフレームをマルチインデックスデータフレームに分割するにはどうすればよいですか?

分類Dev

ループを使用して複数のパンダデータフレームから列を削除するにはどうすればよいですか?

分類Dev

パンダを使用して(列名を指定せずに)データフレームに空の列を追加するにはどうすればよいですか?

分類Dev

パンダデータフレームの新しい列としてnumpy行列を追加するにはどうすればよいですか?

分類Dev

マルチインデックスデータフレームの列レベルをスキップするにはどうすればよいですか?

分類Dev

マルチレベルインデックスなしでgroupbyデータフレームを作成するにはどうすればよいですか?

分類Dev

パンダデータフレームのフィルタリングされた行の平均を計算し、元のデータフレームのすべての列に平均を追加するにはどうすればよいですか?

分類Dev

条件として2つの列を使用してパンダデータフレームの行を削除するにはどうすればよいですか?

分類Dev

行と列のラベルが付いたマトリックスのようなデータフレームを通常のパンダデータフレームに変換するにはどうすればよいですか?

分類Dev

Pythonで、ループを使用してパンダのデータフレームに名前を付けるにはどうすればよいですか?

分類Dev

マルチインデックスデータフレームに列を追加するにはどうすればよいですか?

分類Dev

パンダでマルチインデックスデータフレームを作成するにはどうすればよいですか?

分類Dev

パンダを使用して新しいデータフレーム行をcsvに追加するにはどうすればよいですか?

分類Dev

配列を含む各パンダデータフレームセルにPythonリストを追加するにはどうすればよいですか?

分類Dev

GPUからパンダデータフレームを使用してcsvファイルを読み取るにはどうすればよいですか?

分類Dev

パンダのデータフレームをhtmlのテーブルとして表示するにはどうすればよいですか?

分類Dev

yfinanceでダウンロードされたマルチレベルの列名を処理するにはどうすればよいですか?

分類Dev

パンダを使用してデータフレームの各行に値を追加するにはどうすればよいですか?

分類Dev

パンダを使用して空のデータフレームに行を追加するにはどうすればよいですか?

分類Dev

2番目のレベルのパンダデータフレームを強制して1番目のレベルに追加するにはどうすればよいですか?

分類Dev

グループごとに集計して列をデータフレームに追加するにはどうすればよいですか?

分類Dev

ブール列の値に基づいて、パンダのデータフレームを圧縮するにはどうすればよいですか?

分類Dev

パンダのデータフレームからのみ列ラベルを抽出するにはどうすればよいですか?

分類Dev

グループごとに計算を行ってパンダのデータフレームを更新するにはどうすればよいですか?

分類Dev

パンダデータフレームの複数の列で論理演算子をベクトル化するにはどうすればよいですか?

分類Dev

グループ化されたパンダのデータフレームにタイトルを追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    反復を使用してマルチレベルのパンダデータフレームに追加するにはどうすればよいですか?

  2. 2

    Pythonを使用してデータフレーム内のマルチレベル列の位置を変更するにはどうすればよいですか?

  3. 3

    パンダでマルチレベルのデータフレームを作成するにはどうすればよいですか?

  4. 4

    フィールドとしてリストを含むパンダデータフレームをマルチインデックスデータフレームに分割するにはどうすればよいですか?

  5. 5

    ループを使用して複数のパンダデータフレームから列を削除するにはどうすればよいですか?

  6. 6

    パンダを使用して(列名を指定せずに)データフレームに空の列を追加するにはどうすればよいですか?

  7. 7

    パンダデータフレームの新しい列としてnumpy行列を追加するにはどうすればよいですか?

  8. 8

    マルチインデックスデータフレームの列レベルをスキップするにはどうすればよいですか?

  9. 9

    マルチレベルインデックスなしでgroupbyデータフレームを作成するにはどうすればよいですか?

  10. 10

    パンダデータフレームのフィルタリングされた行の平均を計算し、元のデータフレームのすべての列に平均を追加するにはどうすればよいですか?

  11. 11

    条件として2つの列を使用してパンダデータフレームの行を削除するにはどうすればよいですか?

  12. 12

    行と列のラベルが付いたマトリックスのようなデータフレームを通常のパンダデータフレームに変換するにはどうすればよいですか?

  13. 13

    Pythonで、ループを使用してパンダのデータフレームに名前を付けるにはどうすればよいですか?

  14. 14

    マルチインデックスデータフレームに列を追加するにはどうすればよいですか?

  15. 15

    パンダでマルチインデックスデータフレームを作成するにはどうすればよいですか?

  16. 16

    パンダを使用して新しいデータフレーム行をcsvに追加するにはどうすればよいですか?

  17. 17

    配列を含む各パンダデータフレームセルにPythonリストを追加するにはどうすればよいですか?

  18. 18

    GPUからパンダデータフレームを使用してcsvファイルを読み取るにはどうすればよいですか?

  19. 19

    パンダのデータフレームをhtmlのテーブルとして表示するにはどうすればよいですか?

  20. 20

    yfinanceでダウンロードされたマルチレベルの列名を処理するにはどうすればよいですか?

  21. 21

    パンダを使用してデータフレームの各行に値を追加するにはどうすればよいですか?

  22. 22

    パンダを使用して空のデータフレームに行を追加するにはどうすればよいですか?

  23. 23

    2番目のレベルのパンダデータフレームを強制して1番目のレベルに追加するにはどうすればよいですか?

  24. 24

    グループごとに集計して列をデータフレームに追加するにはどうすればよいですか?

  25. 25

    ブール列の値に基づいて、パンダのデータフレームを圧縮するにはどうすればよいですか?

  26. 26

    パンダのデータフレームからのみ列ラベルを抽出するにはどうすればよいですか?

  27. 27

    グループごとに計算を行ってパンダのデータフレームを更新するにはどうすればよいですか?

  28. 28

    パンダデータフレームの複数の列で論理演算子をベクトル化するにはどうすればよいですか?

  29. 29

    グループ化されたパンダのデータフレームにタイトルを追加するにはどうすればよいですか?

ホットタグ

アーカイブ