データ分析の為に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

便利ですね。