欠損処理


In [1]:
import numpy as np
import pandas as pd
import pandas_datareader.data as web#株価など時系列データをwebから取得するパッケージ
from datetime import datetime

In [2]:
ticker = ['AMZN','FB','INTU']
start = '2012-01-01'#datetime(2016,1,1)
end = '2013-12-31'#datetime(2016,12,31)
df = web.DataReader(ticker,'google',start,end)['Close',:,:]
df2 = df.copy()

NaNにする行と列の番号をランダムに生成する


In [20]:
rand_row = np.random.randint(1,len(df),50)
rand_col = np.random.randint(1,len(df.columns),50)

In [21]:
for i,j in zip(rand_row,rand_col):
    df.iloc[i,j] = np.nan

In [5]:
df


Out[5]:
AMZN FB INTU
Date
2012-01-03 179.03 NaN 52.46
2012-01-04 177.51 NaN 52.30
2012-01-05 177.61 NaN 52.54
2012-01-06 182.61 NaN 53.12
2012-01-09 178.56 NaN 53.18
2012-01-10 179.34 NaN 54.75
2012-01-11 178.90 NaN 55.18
2012-01-12 175.93 NaN 55.28
2012-01-13 178.42 NaN 54.83
2012-01-17 181.66 NaN 55.25
2012-01-18 189.44 NaN 56.45
2012-01-19 194.45 NaN 57.10
2012-01-20 190.93 NaN 57.09
2012-01-23 186.09 NaN 57.41
2012-01-24 187.00 NaN 57.33
2012-01-25 187.80 NaN 57.52
2012-01-26 193.32 NaN 57.49
2012-01-27 195.37 NaN 57.35
2012-01-30 192.15 NaN 56.56
2012-01-31 194.44 NaN 56.44
2012-02-01 179.46 NaN 57.88
2012-02-02 181.72 NaN 57.86
2012-02-03 187.68 NaN 58.47
2012-02-06 183.14 NaN NaN
2012-02-07 184.19 NaN 57.62
2012-02-08 185.48 NaN 57.56
2012-02-09 184.98 NaN 57.60
2012-02-10 185.54 NaN 56.68
2012-02-13 191.59 NaN 56.59
2012-02-14 191.30 NaN 56.77
... ... ... ...
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-20 362.57 46.43 NaN
2013-11-21 368.92 46.70 73.16
2013-11-22 372.31 NaN 72.03
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-04 385.96 48.62 NaN
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-10 387.78 NaN 75.00
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-23 402.92 57.77 NaN
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57
2013-12-31 398.79 NaN 76.32

502 rows × 3 columns

欠損値を確認


In [6]:
df.isnull()


Out[6]:
AMZN FB INTU
Date
2012-01-03 False True False
2012-01-04 False True False
2012-01-05 False True False
2012-01-06 False True False
2012-01-09 False True False
2012-01-10 False True False
2012-01-11 False True False
2012-01-12 False True False
2012-01-13 False True False
2012-01-17 False True False
2012-01-18 False True False
2012-01-19 False True False
2012-01-20 False True False
2012-01-23 False True False
2012-01-24 False True False
2012-01-25 False True False
2012-01-26 False True False
2012-01-27 False True False
2012-01-30 False True False
2012-01-31 False True False
2012-02-01 False True False
2012-02-02 False True False
2012-02-03 False True False
2012-02-06 False True True
2012-02-07 False True False
2012-02-08 False True False
2012-02-09 False True False
2012-02-10 False True False
2012-02-13 False True False
2012-02-14 False True False
... ... ... ...
2013-11-18 False False False
2013-11-19 False False False
2013-11-20 False False True
2013-11-21 False False False
2013-11-22 False True False
2013-11-25 False False False
2013-11-26 False False False
2013-11-27 False False False
2013-11-29 False False False
2013-12-02 False False False
2013-12-03 False False False
2013-12-04 False False True
2013-12-05 False False False
2013-12-06 False False False
2013-12-09 False False False
2013-12-10 False True False
2013-12-11 False False False
2013-12-12 False False False
2013-12-13 False False False
2013-12-16 False False False
2013-12-17 False False False
2013-12-18 False False False
2013-12-19 False False False
2013-12-20 False False False
2013-12-23 False False True
2013-12-24 False False False
2013-12-26 False False False
2013-12-27 False False False
2013-12-30 False False False
2013-12-31 False True False

502 rows × 3 columns


In [7]:
df.notnull()


Out[7]:
AMZN FB INTU
Date
2012-01-03 True False True
2012-01-04 True False True
2012-01-05 True False True
2012-01-06 True False True
2012-01-09 True False True
2012-01-10 True False True
2012-01-11 True False True
2012-01-12 True False True
2012-01-13 True False True
2012-01-17 True False True
2012-01-18 True False True
2012-01-19 True False True
2012-01-20 True False True
2012-01-23 True False True
2012-01-24 True False True
2012-01-25 True False True
2012-01-26 True False True
2012-01-27 True False True
2012-01-30 True False True
2012-01-31 True False True
2012-02-01 True False True
2012-02-02 True False True
2012-02-03 True False True
2012-02-06 True False False
2012-02-07 True False True
2012-02-08 True False True
2012-02-09 True False True
2012-02-10 True False True
2012-02-13 True False True
2012-02-14 True False True
... ... ... ...
2013-11-18 True True True
2013-11-19 True True True
2013-11-20 True True False
2013-11-21 True True True
2013-11-22 True False True
2013-11-25 True True True
2013-11-26 True True True
2013-11-27 True True True
2013-11-29 True True True
2013-12-02 True True True
2013-12-03 True True True
2013-12-04 True True False
2013-12-05 True True True
2013-12-06 True True True
2013-12-09 True True True
2013-12-10 True False True
2013-12-11 True True True
2013-12-12 True True True
2013-12-13 True True True
2013-12-16 True True True
2013-12-17 True True True
2013-12-18 True True True
2013-12-19 True True True
2013-12-20 True True True
2013-12-23 True True False
2013-12-24 True True True
2013-12-26 True True True
2013-12-27 True True True
2013-12-30 True True True
2013-12-31 True False True

502 rows × 3 columns


In [8]:
df.count()


Out[8]:
AMZN    502
FB      386
INTU    482
dtype: int64

欠損値を除外する


In [9]:
df.dropna()


Out[9]:
AMZN FB INTU
Date
2012-05-17 218.36 38.00 54.41
2012-05-18 213.85 38.23 54.51
2012-05-21 218.11 34.03 55.25
2012-05-22 215.33 31.00 55.99
2012-05-23 217.28 32.00 56.47
2012-05-24 215.24 33.03 56.39
2012-05-25 212.89 31.91 56.45
2012-05-29 214.75 28.84 56.63
2012-05-30 209.23 28.19 56.20
2012-05-31 212.91 29.60 56.23
2012-06-01 208.22 27.72 54.80
2012-06-04 214.57 26.90 54.92
2012-06-05 213.21 25.87 55.66
2012-06-06 217.64 26.81 57.70
2012-06-08 218.48 27.10 57.00
2012-06-11 216.50 27.00 55.43
2012-06-12 216.42 27.40 56.77
2012-06-13 214.73 27.27 56.48
2012-06-14 214.45 28.29 57.37
2012-06-15 218.35 30.01 58.32
2012-06-18 222.66 31.41 58.70
2012-06-20 223.02 31.60 58.83
2012-06-21 220.58 31.84 56.89
2012-06-22 222.16 33.05 57.66
2012-06-25 220.07 32.06 56.35
2012-06-27 225.62 32.23 57.52
2012-06-28 221.31 31.36 57.00
2012-06-29 228.35 31.10 59.35
2012-07-02 229.32 30.77 59.68
2012-07-03 229.53 31.20 60.15
... ... ... ...
2013-11-08 350.31 47.53 72.48
2013-11-11 354.38 46.20 72.28
2013-11-12 349.53 46.60 72.41
2013-11-13 356.22 48.71 72.96
2013-11-14 367.40 48.99 73.16
2013-11-15 369.17 49.01 73.67
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-21 368.92 46.70 73.16
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57

370 rows × 3 columns


In [10]:
df.dropna(axis=0)


Out[10]:
AMZN FB INTU
Date
2012-05-17 218.36 38.00 54.41
2012-05-18 213.85 38.23 54.51
2012-05-21 218.11 34.03 55.25
2012-05-22 215.33 31.00 55.99
2012-05-23 217.28 32.00 56.47
2012-05-24 215.24 33.03 56.39
2012-05-25 212.89 31.91 56.45
2012-05-29 214.75 28.84 56.63
2012-05-30 209.23 28.19 56.20
2012-05-31 212.91 29.60 56.23
2012-06-01 208.22 27.72 54.80
2012-06-04 214.57 26.90 54.92
2012-06-05 213.21 25.87 55.66
2012-06-06 217.64 26.81 57.70
2012-06-08 218.48 27.10 57.00
2012-06-11 216.50 27.00 55.43
2012-06-12 216.42 27.40 56.77
2012-06-13 214.73 27.27 56.48
2012-06-14 214.45 28.29 57.37
2012-06-15 218.35 30.01 58.32
2012-06-18 222.66 31.41 58.70
2012-06-20 223.02 31.60 58.83
2012-06-21 220.58 31.84 56.89
2012-06-22 222.16 33.05 57.66
2012-06-25 220.07 32.06 56.35
2012-06-27 225.62 32.23 57.52
2012-06-28 221.31 31.36 57.00
2012-06-29 228.35 31.10 59.35
2012-07-02 229.32 30.77 59.68
2012-07-03 229.53 31.20 60.15
... ... ... ...
2013-11-08 350.31 47.53 72.48
2013-11-11 354.38 46.20 72.28
2013-11-12 349.53 46.60 72.41
2013-11-13 356.22 48.71 72.96
2013-11-14 367.40 48.99 73.16
2013-11-15 369.17 49.01 73.67
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-21 368.92 46.70 73.16
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57

370 rows × 3 columns


In [11]:
df.dropna(axis=1)


Out[11]:
AMZN
Date
2012-01-03 179.03
2012-01-04 177.51
2012-01-05 177.61
2012-01-06 182.61
2012-01-09 178.56
2012-01-10 179.34
2012-01-11 178.90
2012-01-12 175.93
2012-01-13 178.42
2012-01-17 181.66
2012-01-18 189.44
2012-01-19 194.45
2012-01-20 190.93
2012-01-23 186.09
2012-01-24 187.00
2012-01-25 187.80
2012-01-26 193.32
2012-01-27 195.37
2012-01-30 192.15
2012-01-31 194.44
2012-02-01 179.46
2012-02-02 181.72
2012-02-03 187.68
2012-02-06 183.14
2012-02-07 184.19
2012-02-08 185.48
2012-02-09 184.98
2012-02-10 185.54
2012-02-13 191.59
2012-02-14 191.30
... ...
2013-11-18 366.18
2013-11-19 364.94
2013-11-20 362.57
2013-11-21 368.92
2013-11-22 372.31
2013-11-25 376.64
2013-11-26 381.37
2013-11-27 386.71
2013-11-29 393.62
2013-12-02 392.30
2013-12-03 384.66
2013-12-04 385.96
2013-12-05 384.49
2013-12-06 386.95
2013-12-09 384.89
2013-12-10 387.78
2013-12-11 382.19
2013-12-12 381.25
2013-12-13 384.24
2013-12-16 388.97
2013-12-17 387.65
2013-12-18 395.96
2013-12-19 395.19
2013-12-20 402.20
2013-12-23 402.92
2013-12-24 399.20
2013-12-26 404.39
2013-12-27 398.08
2013-12-30 393.37
2013-12-31 398.79

502 rows × 1 columns


In [12]:
df.dropna(axis=0,how='any')


Out[12]:
AMZN FB INTU
Date
2012-05-17 218.36 38.00 54.41
2012-05-18 213.85 38.23 54.51
2012-05-21 218.11 34.03 55.25
2012-05-22 215.33 31.00 55.99
2012-05-23 217.28 32.00 56.47
2012-05-24 215.24 33.03 56.39
2012-05-25 212.89 31.91 56.45
2012-05-29 214.75 28.84 56.63
2012-05-30 209.23 28.19 56.20
2012-05-31 212.91 29.60 56.23
2012-06-01 208.22 27.72 54.80
2012-06-04 214.57 26.90 54.92
2012-06-05 213.21 25.87 55.66
2012-06-06 217.64 26.81 57.70
2012-06-08 218.48 27.10 57.00
2012-06-11 216.50 27.00 55.43
2012-06-12 216.42 27.40 56.77
2012-06-13 214.73 27.27 56.48
2012-06-14 214.45 28.29 57.37
2012-06-15 218.35 30.01 58.32
2012-06-18 222.66 31.41 58.70
2012-06-20 223.02 31.60 58.83
2012-06-21 220.58 31.84 56.89
2012-06-22 222.16 33.05 57.66
2012-06-25 220.07 32.06 56.35
2012-06-27 225.62 32.23 57.52
2012-06-28 221.31 31.36 57.00
2012-06-29 228.35 31.10 59.35
2012-07-02 229.32 30.77 59.68
2012-07-03 229.53 31.20 60.15
... ... ... ...
2013-11-08 350.31 47.53 72.48
2013-11-11 354.38 46.20 72.28
2013-11-12 349.53 46.60 72.41
2013-11-13 356.22 48.71 72.96
2013-11-14 367.40 48.99 73.16
2013-11-15 369.17 49.01 73.67
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-21 368.92 46.70 73.16
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57

370 rows × 3 columns


In [13]:
df.dropna(axis=1,how='all')


Out[13]:
AMZN FB INTU
Date
2012-01-03 179.03 NaN 52.46
2012-01-04 177.51 NaN 52.30
2012-01-05 177.61 NaN 52.54
2012-01-06 182.61 NaN 53.12
2012-01-09 178.56 NaN 53.18
2012-01-10 179.34 NaN 54.75
2012-01-11 178.90 NaN 55.18
2012-01-12 175.93 NaN 55.28
2012-01-13 178.42 NaN 54.83
2012-01-17 181.66 NaN 55.25
2012-01-18 189.44 NaN 56.45
2012-01-19 194.45 NaN 57.10
2012-01-20 190.93 NaN 57.09
2012-01-23 186.09 NaN 57.41
2012-01-24 187.00 NaN 57.33
2012-01-25 187.80 NaN 57.52
2012-01-26 193.32 NaN 57.49
2012-01-27 195.37 NaN 57.35
2012-01-30 192.15 NaN 56.56
2012-01-31 194.44 NaN 56.44
2012-02-01 179.46 NaN 57.88
2012-02-02 181.72 NaN 57.86
2012-02-03 187.68 NaN 58.47
2012-02-06 183.14 NaN NaN
2012-02-07 184.19 NaN 57.62
2012-02-08 185.48 NaN 57.56
2012-02-09 184.98 NaN 57.60
2012-02-10 185.54 NaN 56.68
2012-02-13 191.59 NaN 56.59
2012-02-14 191.30 NaN 56.77
... ... ... ...
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-20 362.57 46.43 NaN
2013-11-21 368.92 46.70 73.16
2013-11-22 372.31 NaN 72.03
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-04 385.96 48.62 NaN
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-10 387.78 NaN 75.00
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-23 402.92 57.77 NaN
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57
2013-12-31 398.79 NaN 76.32

502 rows × 3 columns


In [14]:
for i in rand_row:
    df.iloc[i] = np.nan
df


Out[14]:
AMZN FB INTU
Date
2012-01-03 179.03 NaN 52.46
2012-01-04 177.51 NaN 52.30
2012-01-05 177.61 NaN 52.54
2012-01-06 182.61 NaN 53.12
2012-01-09 178.56 NaN 53.18
2012-01-10 179.34 NaN 54.75
2012-01-11 178.90 NaN 55.18
2012-01-12 175.93 NaN 55.28
2012-01-13 178.42 NaN 54.83
2012-01-17 181.66 NaN 55.25
2012-01-18 189.44 NaN 56.45
2012-01-19 194.45 NaN 57.10
2012-01-20 190.93 NaN 57.09
2012-01-23 186.09 NaN 57.41
2012-01-24 187.00 NaN 57.33
2012-01-25 NaN NaN NaN
2012-01-26 193.32 NaN 57.49
2012-01-27 195.37 NaN 57.35
2012-01-30 192.15 NaN 56.56
2012-01-31 194.44 NaN 56.44
2012-02-01 179.46 NaN 57.88
2012-02-02 181.72 NaN 57.86
2012-02-03 187.68 NaN 58.47
2012-02-06 NaN NaN NaN
2012-02-07 184.19 NaN 57.62
2012-02-08 185.48 NaN 57.56
2012-02-09 184.98 NaN 57.60
2012-02-10 185.54 NaN 56.68
2012-02-13 191.59 NaN 56.59
2012-02-14 191.30 NaN 56.77
... ... ... ...
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-20 NaN NaN NaN
2013-11-21 368.92 46.70 73.16
2013-11-22 NaN NaN NaN
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-04 NaN NaN NaN
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-10 NaN NaN NaN
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-23 NaN NaN NaN
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57
2013-12-31 NaN NaN NaN

502 rows × 3 columns


In [15]:
df.dropna(axis=0,how='all')


Out[15]:
AMZN FB INTU
Date
2012-01-03 179.03 NaN 52.46
2012-01-04 177.51 NaN 52.30
2012-01-05 177.61 NaN 52.54
2012-01-06 182.61 NaN 53.12
2012-01-09 178.56 NaN 53.18
2012-01-10 179.34 NaN 54.75
2012-01-11 178.90 NaN 55.18
2012-01-12 175.93 NaN 55.28
2012-01-13 178.42 NaN 54.83
2012-01-17 181.66 NaN 55.25
2012-01-18 189.44 NaN 56.45
2012-01-19 194.45 NaN 57.10
2012-01-20 190.93 NaN 57.09
2012-01-23 186.09 NaN 57.41
2012-01-24 187.00 NaN 57.33
2012-01-26 193.32 NaN 57.49
2012-01-27 195.37 NaN 57.35
2012-01-30 192.15 NaN 56.56
2012-01-31 194.44 NaN 56.44
2012-02-01 179.46 NaN 57.88
2012-02-02 181.72 NaN 57.86
2012-02-03 187.68 NaN 58.47
2012-02-07 184.19 NaN 57.62
2012-02-08 185.48 NaN 57.56
2012-02-09 184.98 NaN 57.60
2012-02-10 185.54 NaN 56.68
2012-02-13 191.59 NaN 56.59
2012-02-14 191.30 NaN 56.77
2012-02-15 184.47 NaN 56.65
2012-02-16 179.93 NaN 58.01
... ... ... ...
2013-11-08 350.31 47.53 72.48
2013-11-11 354.38 46.20 72.28
2013-11-12 349.53 46.60 72.41
2013-11-13 356.22 48.71 72.96
2013-11-14 367.40 48.99 73.16
2013-11-15 369.17 49.01 73.67
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-21 368.92 46.70 73.16
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57

455 rows × 3 columns

欠損値を補間する


In [17]:
df.fillna(0)


Out[17]:
AMZN FB INTU
Date
2012-01-03 179.03 0.00 52.46
2012-01-04 177.51 0.00 52.30
2012-01-05 177.61 0.00 52.54
2012-01-06 182.61 0.00 53.12
2012-01-09 178.56 0.00 53.18
2012-01-10 179.34 0.00 54.75
2012-01-11 178.90 0.00 55.18
2012-01-12 175.93 0.00 55.28
2012-01-13 178.42 0.00 54.83
2012-01-17 181.66 0.00 55.25
2012-01-18 189.44 0.00 56.45
2012-01-19 194.45 0.00 57.10
2012-01-20 190.93 0.00 57.09
2012-01-23 186.09 0.00 57.41
2012-01-24 187.00 0.00 57.33
2012-01-25 187.80 0.00 57.52
2012-01-26 193.32 0.00 57.49
2012-01-27 195.37 0.00 57.35
2012-01-30 192.15 0.00 56.56
2012-01-31 194.44 0.00 56.44
2012-02-01 179.46 0.00 57.88
2012-02-02 181.72 0.00 57.86
2012-02-03 187.68 0.00 58.47
2012-02-06 183.14 0.00 57.90
2012-02-07 184.19 0.00 57.62
2012-02-08 185.48 0.00 57.56
2012-02-09 184.98 0.00 57.60
2012-02-10 185.54 0.00 56.68
2012-02-13 191.59 0.00 56.59
2012-02-14 191.30 0.00 56.77
... ... ... ...
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-20 362.57 46.43 73.14
2013-11-21 368.92 46.70 73.16
2013-11-22 372.31 46.23 72.03
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-04 385.96 48.62 74.34
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-10 387.78 50.24 75.00
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-23 402.92 57.77 76.32
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57
2013-12-31 398.79 54.65 76.32

502 rows × 3 columns


In [22]:
df.fillna({'FB':0,'INTU':100})


Out[22]:
AMZN FB INTU
Date
2012-01-03 179.03 0.00 52.46
2012-01-04 177.51 0.00 52.30
2012-01-05 177.61 0.00 52.54
2012-01-06 182.61 0.00 53.12
2012-01-09 178.56 0.00 53.18
2012-01-10 179.34 0.00 54.75
2012-01-11 178.90 0.00 55.18
2012-01-12 175.93 0.00 55.28
2012-01-13 178.42 0.00 54.83
2012-01-17 181.66 0.00 55.25
2012-01-18 189.44 0.00 100.00
2012-01-19 194.45 0.00 57.10
2012-01-20 190.93 0.00 57.09
2012-01-23 186.09 0.00 57.41
2012-01-24 187.00 0.00 57.33
2012-01-25 187.80 0.00 57.52
2012-01-26 193.32 0.00 57.49
2012-01-27 195.37 0.00 57.35
2012-01-30 192.15 0.00 56.56
2012-01-31 194.44 0.00 56.44
2012-02-01 179.46 0.00 57.88
2012-02-02 181.72 0.00 57.86
2012-02-03 187.68 0.00 100.00
2012-02-06 183.14 0.00 57.90
2012-02-07 184.19 0.00 57.62
2012-02-08 185.48 0.00 57.56
2012-02-09 184.98 0.00 57.60
2012-02-10 185.54 0.00 56.68
2012-02-13 191.59 0.00 56.59
2012-02-14 191.30 0.00 56.77
... ... ... ...
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-20 362.57 46.43 73.14
2013-11-21 368.92 46.70 73.16
2013-11-22 372.31 46.23 72.03
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-04 385.96 48.62 74.34
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-10 387.78 50.24 75.00
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-23 402.92 57.77 76.32
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57
2013-12-31 398.79 54.65 76.32

502 rows × 3 columns


In [23]:
df.fillna(method='ffill')


Out[23]:
AMZN FB INTU
Date
2012-01-03 179.03 NaN 52.46
2012-01-04 177.51 NaN 52.30
2012-01-05 177.61 NaN 52.54
2012-01-06 182.61 NaN 53.12
2012-01-09 178.56 NaN 53.18
2012-01-10 179.34 NaN 54.75
2012-01-11 178.90 NaN 55.18
2012-01-12 175.93 NaN 55.28
2012-01-13 178.42 NaN 54.83
2012-01-17 181.66 NaN 55.25
2012-01-18 189.44 NaN 55.25
2012-01-19 194.45 NaN 57.10
2012-01-20 190.93 NaN 57.09
2012-01-23 186.09 NaN 57.41
2012-01-24 187.00 NaN 57.33
2012-01-25 187.80 NaN 57.52
2012-01-26 193.32 NaN 57.49
2012-01-27 195.37 NaN 57.35
2012-01-30 192.15 NaN 56.56
2012-01-31 194.44 NaN 56.44
2012-02-01 179.46 NaN 57.88
2012-02-02 181.72 NaN 57.86
2012-02-03 187.68 NaN 57.86
2012-02-06 183.14 NaN 57.90
2012-02-07 184.19 NaN 57.62
2012-02-08 185.48 NaN 57.56
2012-02-09 184.98 NaN 57.60
2012-02-10 185.54 NaN 56.68
2012-02-13 191.59 NaN 56.59
2012-02-14 191.30 NaN 56.77
... ... ... ...
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-20 362.57 46.43 73.14
2013-11-21 368.92 46.70 73.16
2013-11-22 372.31 46.23 72.03
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-04 385.96 48.62 74.34
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-10 387.78 50.24 75.00
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-23 402.92 57.77 76.32
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57
2013-12-31 398.79 54.65 76.32

502 rows × 3 columns


In [24]:
df.fillna(method='bfill')


Out[24]:
AMZN FB INTU
Date
2012-01-03 179.03 38.00 52.46
2012-01-04 177.51 38.00 52.30
2012-01-05 177.61 38.00 52.54
2012-01-06 182.61 38.00 53.12
2012-01-09 178.56 38.00 53.18
2012-01-10 179.34 38.00 54.75
2012-01-11 178.90 38.00 55.18
2012-01-12 175.93 38.00 55.28
2012-01-13 178.42 38.00 54.83
2012-01-17 181.66 38.00 55.25
2012-01-18 189.44 38.00 57.10
2012-01-19 194.45 38.00 57.10
2012-01-20 190.93 38.00 57.09
2012-01-23 186.09 38.00 57.41
2012-01-24 187.00 38.00 57.33
2012-01-25 187.80 38.00 57.52
2012-01-26 193.32 38.00 57.49
2012-01-27 195.37 38.00 57.35
2012-01-30 192.15 38.00 56.56
2012-01-31 194.44 38.00 56.44
2012-02-01 179.46 38.00 57.88
2012-02-02 181.72 38.00 57.86
2012-02-03 187.68 38.00 57.90
2012-02-06 183.14 38.00 57.90
2012-02-07 184.19 38.00 57.62
2012-02-08 185.48 38.00 57.56
2012-02-09 184.98 38.00 57.60
2012-02-10 185.54 38.00 56.68
2012-02-13 191.59 38.00 56.59
2012-02-14 191.30 38.00 56.77
... ... ... ...
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-20 362.57 46.43 73.14
2013-11-21 368.92 46.70 73.16
2013-11-22 372.31 46.23 72.03
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-04 385.96 48.62 74.34
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-10 387.78 50.24 75.00
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-23 402.92 57.77 76.32
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57
2013-12-31 398.79 54.65 76.32

502 rows × 3 columns


In [29]:
df.fillna(method='backfill',limit=70)


Out[29]:
AMZN FB INTU
Date
2012-01-03 179.03 NaN 52.46
2012-01-04 177.51 NaN 52.30
2012-01-05 177.61 NaN 52.54
2012-01-06 182.61 NaN 53.12
2012-01-09 178.56 NaN 53.18
2012-01-10 179.34 NaN 54.75
2012-01-11 178.90 NaN 55.18
2012-01-12 175.93 NaN 55.28
2012-01-13 178.42 NaN 54.83
2012-01-17 181.66 NaN 55.25
2012-01-18 189.44 NaN 57.10
2012-01-19 194.45 NaN 57.10
2012-01-20 190.93 NaN 57.09
2012-01-23 186.09 NaN 57.41
2012-01-24 187.00 NaN 57.33
2012-01-25 187.80 NaN 57.52
2012-01-26 193.32 NaN 57.49
2012-01-27 195.37 NaN 57.35
2012-01-30 192.15 NaN 56.56
2012-01-31 194.44 NaN 56.44
2012-02-01 179.46 NaN 57.88
2012-02-02 181.72 NaN 57.86
2012-02-03 187.68 NaN 57.90
2012-02-06 183.14 NaN 57.90
2012-02-07 184.19 38.00 57.62
2012-02-08 185.48 38.00 57.56
2012-02-09 184.98 38.00 57.60
2012-02-10 185.54 38.00 56.68
2012-02-13 191.59 38.00 56.59
2012-02-14 191.30 38.00 56.77
... ... ... ...
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-20 362.57 46.43 73.14
2013-11-21 368.92 46.70 73.16
2013-11-22 372.31 46.23 72.03
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-04 385.96 48.62 74.34
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-10 387.78 50.24 75.00
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-23 402.92 57.77 76.32
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57
2013-12-31 398.79 54.65 76.32

502 rows × 3 columns


In [30]:
df.fillna(method='ffill',axis=1)


Out[30]:
AMZN FB INTU
Date
2012-01-03 179.03 179.03 52.46
2012-01-04 177.51 177.51 52.30
2012-01-05 177.61 177.61 52.54
2012-01-06 182.61 182.61 53.12
2012-01-09 178.56 178.56 53.18
2012-01-10 179.34 179.34 54.75
2012-01-11 178.90 178.90 55.18
2012-01-12 175.93 175.93 55.28
2012-01-13 178.42 178.42 54.83
2012-01-17 181.66 181.66 55.25
2012-01-18 189.44 189.44 189.44
2012-01-19 194.45 194.45 57.10
2012-01-20 190.93 190.93 57.09
2012-01-23 186.09 186.09 57.41
2012-01-24 187.00 187.00 57.33
2012-01-25 187.80 187.80 57.52
2012-01-26 193.32 193.32 57.49
2012-01-27 195.37 195.37 57.35
2012-01-30 192.15 192.15 56.56
2012-01-31 194.44 194.44 56.44
2012-02-01 179.46 179.46 57.88
2012-02-02 181.72 181.72 57.86
2012-02-03 187.68 187.68 187.68
2012-02-06 183.14 183.14 57.90
2012-02-07 184.19 184.19 57.62
2012-02-08 185.48 185.48 57.56
2012-02-09 184.98 184.98 57.60
2012-02-10 185.54 185.54 56.68
2012-02-13 191.59 191.59 56.59
2012-02-14 191.30 191.30 56.77
... ... ... ...
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-20 362.57 46.43 73.14
2013-11-21 368.92 46.70 73.16
2013-11-22 372.31 46.23 72.03
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-04 385.96 48.62 74.34
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-10 387.78 50.24 75.00
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-23 402.92 57.77 76.32
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57
2013-12-31 398.79 54.65 76.32

502 rows × 3 columns


In [31]:
df.fillna(method='pad',inplace=True)

In [32]:
df


Out[32]:
AMZN FB INTU
Date
2012-01-03 179.03 NaN 52.46
2012-01-04 177.51 NaN 52.30
2012-01-05 177.61 NaN 52.54
2012-01-06 182.61 NaN 53.12
2012-01-09 178.56 NaN 53.18
2012-01-10 179.34 NaN 54.75
2012-01-11 178.90 NaN 55.18
2012-01-12 175.93 NaN 55.28
2012-01-13 178.42 NaN 54.83
2012-01-17 181.66 NaN 55.25
2012-01-18 189.44 NaN 55.25
2012-01-19 194.45 NaN 57.10
2012-01-20 190.93 NaN 57.09
2012-01-23 186.09 NaN 57.41
2012-01-24 187.00 NaN 57.33
2012-01-25 187.80 NaN 57.52
2012-01-26 193.32 NaN 57.49
2012-01-27 195.37 NaN 57.35
2012-01-30 192.15 NaN 56.56
2012-01-31 194.44 NaN 56.44
2012-02-01 179.46 NaN 57.88
2012-02-02 181.72 NaN 57.86
2012-02-03 187.68 NaN 57.86
2012-02-06 183.14 NaN 57.90
2012-02-07 184.19 NaN 57.62
2012-02-08 185.48 NaN 57.56
2012-02-09 184.98 NaN 57.60
2012-02-10 185.54 NaN 56.68
2012-02-13 191.59 NaN 56.59
2012-02-14 191.30 NaN 56.77
... ... ... ...
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-20 362.57 46.43 73.14
2013-11-21 368.92 46.70 73.16
2013-11-22 372.31 46.23 72.03
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-04 385.96 48.62 74.34
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-10 387.78 50.24 75.00
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-23 402.92 57.77 76.32
2013-12-24 399.20 57.96 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57
2013-12-31 398.79 54.65 76.32

502 rows × 3 columns

欠損が発生するメカニズム

  • MCAR (Missing Completely At Random):欠損が完全にランダム
  • MAR (Missing At Random):欠損が他の変数の値と関係しているが、その変数の値とは無関係
  • MNAR (Missing Not At Random):欠損値の有無が欠損値を持つ変数自身と関係

欠損への対応

  • 欠損値の削除
  • 欠損値の補完

欠損値の補完

  • 欠損値への代入
  • 欠損値の推定

欠損値の削除

  • リストワイズ法:欠損値を持つサンプルレコードを削除
  • ペアワイズ法:相関係数や分散などの算出において2変数のいずれかの欠損値を持つサンプルを削除

欠損値への代入

  • 単一代入法
  • 多重代入法
  • 平均値代入法
  • 回帰代入法:欠損値のないサンプルに対し回帰分析を行い、欠損値を含む項目の推定式を下に欠損値を補完
  • 完全情報最尤推定法:サンプルごとに欠損パターに応じた尤度関数を仮定して最尤推定を実施して得られる多変量正規分布を用いて平均値や分散共分散行列を推定
  • 多重代入法:欠損値に代入したデータセットを複数作成し、各データセットに対して分析を実行し、その結果を統合することにより欠損値を補完

In [ ]: