データ分析の為にPandasを利用する その2
前回の記事では、Pandasの簡単な操作をしました。面白いのでもう少し続けてみます。
今度はcsvを2つ用意しました。
$ cat tmp01.csv ,a,b,c 1,1,10,100 2,2,,200 3,4,30,300 $ cat tmp02.csv ,d 1,3 3,9
まずは普通に読みます。
$ python >>> import pandas as pd >>> tmp_data01 = pd.read_csv("tmp01.csv") >>> tmp_data01 Unnamed: 0 a b c 0 1 1 10.0 100 1 2 2 NaN 200 2 3 4 30.0 300
先頭をインデックスとして読みます。
>>> tmp_data01 = pd.read_csv("tmp01.csv",index_col=0) >>> tmp_data01 a b c 1 1 10.0 100 2 2 NaN 200 3 4 30.0 300
欠損データを前のデータでパディングします。
>>> tmp_data01 = pd.read_csv("tmp01.csv",index_col=0).fillna(method="pad") >>> tmp_data01 a b c 1 1 10.0 100 2 2 10.0 200 3 4 30.0 300
tmp02を読みます。
>>> tmp_data02 = pd.read_csv("tmp02.csv",index_col=0) >>> tmp_data02 d 1 3 3 9
tmp01とtmp02をつなげます。http://pandas.pydata.org/pandas-docs/stable/merging.html を参考にしました。
>>> data = pd.concat([tmp_data01,tmp_data02],axis=1) >>> data a b c d 1 1 10.0 100 3.0 2 2 10.0 200 NaN 3 4 30.0 300 9.0
パディングではなく、線形補完してみます。
>>> data = pd.concat([tmp_data01,tmp_data02],axis=1).interpolate(method='linear') >>> data a b c d 1 1 10.0 100 3.0 2 2 10.0 200 6.0 3 4 30.0 300 9.0
1つだけくりぬいてみます
>>> a_data = data["a"] >>> a_data 1 1 2 2 3 4 Name: a, dtype: int64
前項との和を計算します。
>>> a_plus_data = a_data + a_data.shift() >>> a_plus_data 1 NaN 2 3.0 3 6.0 Name: a, dtype: float64
Logもとってみましょう。
>>> import numpy as np >>> d_data = data["d"] >>> d_data 1 3.0 2 6.0 3 9.0 Name: d, dtype: float64 >>> d_log_data = np.log(d_data/d_data.shift()) >>> d_log_data 1 NaN 2 0.693147 3 0.405465 Name: d, dtype: float64
便利ですね。