データの欠損値を埋める
ドル円のTTMレートが必要で三菱東京UFJ銀行公表の対顧客外国為替相場をエクセルファイルで取得(※)しました。データを読み込んでみます。
>import pandas as pd
>URL="murc_2014.xls" # Set a path
>EXL=pd.ExcelFile(URL) # Open
>Data=EXL.parse("data") # Parse
出力は以下。
>Data=Data [[u'2014年',u'米ドル(USD)']]
>Data
2014年 米ドル(USD)
0 平成26年 NaN
1 DATE TTS
2 2014-01-01 00:00:00 NaN
3 2014-01-02 00:00:00 NaN
4 2014-01-03 00:00:00 NaN
5 2014-01-04 00:00:00 NaN
6 2014-01-05 00:00:00 NaN
7 2014-01-06 00:00:00 105.64
8 2014-01-07 00:00:00 105.41
9 2014-01-08 00:00:00 105.78
10 2014-01-09 00:00:00 105.86
11 2014-01-10 00:00:00 105.95
12 2014-01-11 00:00:00 NaN
13 2014-01-12 00:00:00 NaN
14 2014-01-13 00:00:00 NaN
15 2014-01-14 00:00:00 104.32
土日は銀行がクローズしているのでデータが存在せず、NaNと表示されます。
そこで、データを埋めるか行を削る必要があります。
(1) 欠損値を一括して指定の値(例えば0)に置き換える。
>Data = Data.fillna(0)
>Data
2014年 米ドル(USD)
0 平成26年 0
1 DATE TTS
2 2014-01-01 00:00:00 0
3 2014-01-02 00:00:00 0
4 2014-01-03 00:00:00 0
(2) 欠損値の直後値で埋める。
>Data = Data.fillna(method='ffill')
>Data
2014年 米ドル(USD)
0 平成26年 NaN
1 DATE TTS
2 2014-01-01 00:00:00 TTS
3 2014-01-02 00:00:00 TTS
4 2014-01-03 00:00:00 TTS
5 2014-01-04 00:00:00 TTS
6 2014-01-05 00:00:00 TTS
7 2014-01-06 00:00:00 105.64
8 2014-01-07 00:00:00 105.41
9 2014-01-08 00:00:00 105.78
10 2014-01-09 00:00:00 105.86
11 2014-01-10 00:00:00 105.95
12 2014-01-11 00:00:00 105.95
13 2014-01-12 00:00:00 105.95
14 2014-01-13 00:00:00 105.95
15 2014-01-14 00:00:00 104.32
(3) 欠損値のを含む行(axis=0)か列(axis=1)を削除
>Data = Data.dropna(axis=0)
>Data
2014年 米ドル(USD)
1 DATE TTS
7 2014-01-06 00:00:00 105.64
8 2014-01-07 00:00:00 105.41
9 2014-01-08 00:00:00 105.78
10 2014-01-09 00:00:00 105.86
11 2014-01-10 00:00:00 105.95
15 2014-01-14 00:00:00 104.32
参考
(※)三菱UFJリサーチ&コンサルティング | 外国為替相場 | 1990年以降の為替相場
Python For Economist [第7回]: Pandasデータハンドリング・便利機能まとめ20選 | necochan