2017-03-22 13 views
2

私はPandas(およびPython)の新人であり、Yahoo APIの株価に取り組んでいます。パンダのYahoo Stock API

データを取得してループし、日付と値を取得する必要があります。

df 
      Open  High   Low  Close  Volume 
Date                  
2011-01-03 325.640015 348.600006 324.840027 339.320007 140234700 
2011-02-01 341.299988 364.899994 337.720001 353.210022 127618700 
2011-03-01 355.470001 361.669983 326.259979 348.510010 125874700 

それがインデックスであるので、私は日付ではなく、月の日付の値を取得することができ

最善の方法(?):ここ

はコード

df = pd.get_data_yahoo(symbols = 'AAPL', 
    start = datetime(2011, 1, 1), 
    end = datetime(2012, 1, 1), 
    interval = 'm') 

結果がありますこの情報のためにデータをループするには?これはデータの処理であり、ソートや検索は行われません。

+3

'DF = df.assign(月= df.index.month)' –

+1

はあなたが達成したいているものたちを表示します。 –

答えて

1

データフレーム内の行を繰り返し処理して処理する必要がある場合は、pandas.DataFrame.apply()がうまくいきます。

コード:

いくつかのモック処理コード...

def process_data(row): 
    # the index becomes the name when converted to a series (row) 
    print(row.name.month, row.Close) 

テストコード:

import datetime as dt 
from pandas_datareader import data 

df = data.get_data_yahoo(
    'AAPL', 
    start=dt.datetime(2011, 1, 1), 
    end=dt.datetime(2011, 5, 1), 
    interval='m') 
print(df) 

# process each row 
df.apply(process_data, axis=1) 

結果:

    Open  High   Low  Close  Volume \ 
Date                  
2011-01-03 325.640015 348.600006 324.840027 339.320007 140234700 
2011-02-01 341.299988 364.899994 337.720001 353.210022 127618700 
2011-03-01 355.470001 361.669983 326.259979 348.510010 125874700 
2011-04-01 351.110016 355.130005 320.160004 350.130005 128252100 

      Adj Close 
Date     
2011-01-03 43.962147 
2011-02-01 45.761730 
2011-03-01 45.152802 
2011-04-01 45.362682 

1 339.320007 
2 353.210022 
3 348.51001 
4 350.130005 
0

ここからは、Yahooのデータを使用しようとすると、私の人生はうまくなりました。 最初にデータフレームインデックスから日付を取得していました。

df = df.assign(date = df.index.date) 

ここで私はデータを扱うことから有益であることがわかりました。

df [ 'diff' ] = df [ 'Close' ].diff() 
df [ 'pct_chg' ] = df [ 'Close' ].pct_change() 
df [ 'hl' ] = df [ 'High' ] - df [ 'Low' ] 

パンダは素晴らしいものです。

0

私はこれがうまくいくと思います。

import pandas_datareader.data as web 
import datetime  

start = datetime.datetime(2013, 1, 1) 
end = datetime.datetime(2016, 1, 27) 
df = web.DataReader("GOOGL", 'yahoo', start, end) 

dates =[] 
for x in range(len(df)): 
    newdate = str(df.index[x]) 
    newdate = newdate[0:10] 
    dates.append(newdate) 

df['dates'] = dates 

print df.head() 
print df.tail() 

さらに、これらの種類の操作方法のヒントについては、下のリンクをご覧ください。

https://pandas-datareader.readthedocs.io/en/latest/remote_data.html#yahoo-finance