現実にはデータが完全な形で提供されることはほぼなく、欠損値や外れ値が存在する。
また、列の内容が文字列の場合、数値に変換することも必要になる。
# 欠損値があるかをtrue/falseで表示 df.isnull() # 欠損値のある列を確認 df.isnull().any(axis=0) # 欠損値のある行を確認 df.isnull().any(axis=1) # 欠損値のある行の数を確認 df.isnull().sum()
# 欠損値のある行を削除 df = df.dropna(how='any',axis=0) # 欠損値を0で穴埋め df["国語"] = df["国語"].fillna(0) # 欠損値を平均で穴埋め heikin = df["国語"].mean() df["国語"] = df["国語"].fillna(heikin)
他にもグループ毎で平均を出し、その値で欠損値を埋める方法もある。
例えば、男を1、女を0などに置き換える。
# 男 列ができ、1と0になる。 x = pd.get_dummies(df['男'],drop_first=True) # 結果を元のdfに連結する x=pd.get_dummies(df['男'],drop_first=True) df = pd.concat([df,x],axis=1)
A,B,Cの3パターンがあるとき、drop_first=Trueでは、B,Cの2列、drop_first=Falseでは、A,B,Cの3列ができ、それぞれ1か0が入る。
no = df[(df["列名1"]>上限値) & (df["列名2"]<下限値)].index df = df.drop(no,axis=0)