読者です 読者をやめる 読者になる 読者になる

サイエンティストとマーケターのはざま

Pythonとか広告とかデータ分析とかとか


データの欠損値を埋める

Python pandas

ドル円の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