米国市場の株価終値データを用いる。
In [2]:
import pandas as pd
import pandas_datareader.data as web#株価など時系列データをwebから取得するパッケージ
from datetime import datetime
In [2]:
ticker = ['AAPL','IBM','MSFT','GOOG']
start = '2016-01-01'#datetime(2016,1,1)
end = '2016-12-31'#datetime(2016,12,31)
df = web.DataReader(ticker,'yahoo',start,end)['Close',:,:]
In [3]:
print(df.head(5))
日時を扱うdatetimeについて少しだけ学ぶ。
In [3]:
dt = datetime(2016,3,18)
print(dt)
print(datetime(2017,4,10,10,20,30))
print(datetime.now())
print(dt.year)
print(dt.month)
print(dt.day)
列名を調べる
In [17]:
print(df.columns)
行名を調べる
In [18]:
print(df.index)
In [20]:
print(type(df))
print(type(df.ix[0,0]))
print(type(df.columns))
print(type(df.index))
print(type(df.columns[0]))
print(type(df.index[0]))
In [44]:
print(len(df))#行の長さのみ
print(len(df.ix[0]))#列の長さ(1列目の長さ)のみ
print(len(df.columns))#列の長さのみ
print(df.shape)#行と列の長さ
In [4]:
df1 = df['AAPL']
print(df1.head(5))
print(type(df1))
次の方法は英単語以外の列名のときは注意が必要
In [6]:
df1 = df.AAPL
print(df1.head(5))
print(type(df1))
In [7]:
df1 = df.ix[:,'AAPL']
print(df1.head(5))
print(type(df1))
ixは列番号で指定できる。
In [38]:
df1 = df.ix[:,0]
print(df1.head(5))
print(type(df1))
次のような抽出方法はない。
In [37]:
print(df[0])
In [8]:
df1 = df[['AAPL','MSFT']]
print(df1.head(5))
In [9]:
df1 = df.ix[:,['AAPL','MSFT']]
print(df1.head(5))
ixを使うと列番号で指定できる
In [10]:
df1 = df.ix[:,[0,2]]
print(df1.head(5))
In [34]:
df1 = df.ix[:,1:3]
print(df1.head(5))
In [45]:
df1 = df.ix[:,'IBM':]
print(df1.head(5))
In [26]:
df0 = df.ix[datetime(2016,1,5)]
print(df0)
print(type(df0))
In [11]:
df0 = df.ix['2016-01-05']
print(df0)
print(type(df0))
In [12]:
df0 = df.ix['2016-01-05',:]
print(df0)
print(type(df0))
In [46]:
df0 = df.ix[1,:]
print(df0)
print(type(df0))
In [27]:
df0 = df.ix[['2016-01-05','2016-01-07']]
print(df0)
print(type(df0))
複数行では、文字列だとなぜか抽出できない。むしろなぜか1行のときは抽出できた。
型をあわせて抽出する。
In [28]:
df0 = df.ix[[datetime(2016,1,5),datetime(2016,1,7)]]
print(df0)
In [29]:
df0 = df.ix[[datetime(2016,1,5),datetime(2016,1,7)],:]
print(df0)
In [15]:
df0 = df.ix[[1,3],:]
print(df0)
上から5行、下から5行抽出する
In [36]:
print(df.head(5))
print(df.tail(5))
In [57]:
df0_head = df.ix[:5,:]
df0_tail = df.ix[-5:,:]
print(df0_head)
print(df0_tail)
次の書き方は多少違和感があるかもしれない(実用のために生み出されたものらしい)。
In [59]:
print(df[:5])
print(df[2:5])
行と列を同時に絞り込む
In [30]:
df_sub = df.ix[[datetime(2016,1,5),datetime(2016,1,7)],['AAPL','MSFT']]
print(df_sub)
インデックス番号で行と列を絞り込む
In [31]:
df_sub = df.ix[[1,3],[0,1]]
print(df_sub)
行名・列名とインデックス番号の組み合わせも可能
In [47]:
df_sub = df.ix[:5,['AAPL','MSFT']]
print(df_sub)
In [53]:
df_sub = df.ix[:datetime(2016,1,8),['AAPL','MSFT']]
print(df_sub)
ただし次のような書き方は不可
In [50]:
df_sub = df.ix[:5,['AAPL',3]]
print(df_sub)
In [ ]: