In [15]:
import numpy as np
from numpy import nan
from pandas import Series,DataFrame
import pandas as pd
In [2]:
data = Series(['one','two', np.nan, 'four'])
In [3]:
data
Out[3]:
0     one
1     two
2     NaN
3    four
dtype: object
In [4]:
# null値は簡単に見つけられます。
data.isnull()
Out[4]:
0    False
1    False
2     True
3    False
dtype: bool
In [5]:
# null値は簡単に取り除けます。
data.dropna()
Out[5]:
0     one
1     two
3    four
dtype: object
In [6]:
# DataFrameの場合をみてみます。
dframe = DataFrame([[1,2,3],[np.nan,5,6],[7,np.nan,9],[np.nan,np.nan,np.nan]])
In [7]:
dframe
Out[7]:
0 1 2
0 1 2 3
1 NaN 5 6
2 7 NaN 9
3 NaN NaN NaN
In [8]:
clean_dframe = dframe.dropna()
In [9]:
clean_dframe
Out[9]:
0 1 2
0 1 2 3
In [12]:
# 取り除き方を指定することもできます。すべてNaNの行がなくなります。
dframe.dropna(how='all')
Out[12]:
0 1 2
0 1 2 3
1 NaN 5 6
2 7 NaN 9
In [11]:
# 軸を指定することも可能です。
dframe.dropna(axis=1)
# どの列にも必ず1つはnull値があるので、すべての列がなくなります。
Out[11]:
0
1
2
3
In [16]:
#閾値を決めることも可能です。
dframe2 = DataFrame([[1,2,3,nan],[2,nan,5,6],[nan,7,nan,9],[1,nan,nan,nan]])
dframe2
Out[16]:
0 1 2 3
0 1 2 3 NaN
1 2 NaN 5 6
2 NaN 7 NaN 9
3 1 NaN NaN NaN
In [21]:
# nullではない値が2個以上必要
dframe2.dropna(thresh=2)
Out[21]:
0 1 2 3
0 1 2 3 NaN
1 2 NaN 5 6
2 NaN 7 NaN 9
In [22]:
# 同じく3個以上
dframe2.dropna(thresh=3)
Out[22]:
0 1 2 3
0 1 2 3 NaN
1 2 NaN 5 6
In [23]:
# null値を埋められます。
dframe2.fillna(1)
Out[23]:
0 1 2 3
0 1 2 3 1
1 2 1 5 6
2 1 7 1 9
3 1 1 1 1
In [24]:
# 列ごとに埋める値を変えられます。
dframe2.fillna({0:0,1:1,2:2,3:3})
Out[24]:
0 1 2 3
0 1 2 3 3
1 2 1 5 6
2 0 7 2 9
3 1 1 2 3
In [25]:
dframe2
Out[25]:
0 1 2 3
0 1 2 3 NaN
1 2 NaN 5 6
2 NaN 7 NaN 9
3 1 NaN NaN NaN
In [28]:
# inplace=Trueにすると、元のDataFrameを変更してくれます。
# dframe2 = dframe2.fillna(....)と同じ
dframe2.fillna(0,inplace=True)
In [29]:
dframe2
Out[29]:
0 1 2 3
0 1 2 3 0
1 2 0 5 6
2 0 7 0 9
3 1 0 0 0