Pythonデータ洗浄の処理欠落値
5090 ワード
一、欠落値の処理
1.一般的な方法 dropna
これにより、NAを含む行が除去される fillna
結果を出力すると、NAは括弧内の値になります
また、入力パラメータmethod=‘ffill’は、NAを前の行の値に埋め込むことができる
同様に、method=‘bfill’を入力し、NAを次の行の値に埋め込む isnull
メソッドは、欠落した値のブール値を返す notnull
isnullと逆関数
2.欠落した値dropnaをフィルタリングデフォルトでは欠落した値を含む行が削除されます.DataFrameオブジェクトを処理する場合、Seriesよりも複雑になります.DataFrameには行と列があるため、dropnaにパラメータを入力して異なるニーズを満たすことができます. how
dropnaにhow="all"が入力されると、すべての値がNAの行が削除されます. axis
dropnaにaxis=1が入力されると、削除された次元を行ごとに削除する、すなわち列を削除する(混同しやすい) thresh
dropnaにthresh=2を入力し、少なくとも2つの非NA値を含む行を出力する
3.欠落値を補完するほとんどの場合、主にfillnaを使用して欠落値を補完します.次にfillnaのパラメータについて説明します. Value
fillnaを呼び出すと、欠落した値の代わりに定数/文字列を使用できます.
Fillnaを呼び出すときに辞書を使用し、異なる列に異なる塗りつぶし値を設定できます. method
fillnaにmethod=‘ffill’またはmethod=‘bfill’を入力し、NA値を前の行または後の行の値に入力します.他のパラメータがない場合は、デフォルトは‘ffill’です. axis
Fillnaにaxis=1を入力、塗りつぶし方向を列ごとに塗りつぶす、すなわち横塗り(ここでは混同しやすい)に変換し、規定がなければaxis=0とデフォルトで設定する. limit
fillnaにlimitパラメータを入力して、順方向または後方向の充填時の最大の充填範囲を規定する inplace fillnaはデフォルトで新しいオブジェクトを返します.元のオブジェクトを変更する場合は、パラメータinplace=True を入力します.
1.一般的な方法
import numpy as np
import pandas as pd
string_data = pd.Series(['apple','banana',np.nan,'orange'])
print(string_data.dropna())
これにより、NAを含む行が除去される
0 apple
1 banana
3 orange
dtype: object
string_data = pd.Series(['apple','banana',np.nan,'orange'])
print(string_data.fillna(1))
結果を出力すると、NAは括弧内の値になります
0 apple
1 banana
2 1
3 orange
dtype: object
また、入力パラメータmethod=‘ffill’は、NAを前の行の値に埋め込むことができる
0 apple
1 banana
2 banana
3 orange
dtype: object
同様に、method=‘bfill’を入力し、NAを次の行の値に埋め込む
0 apple
1 banana
2 orange
3 orange
dtype: object
メソッドは、欠落した値のブール値を返す
string_data = pd.Series(['apple','banana',np.nan,'orange'])
print(string_data.isnull())
0 False
1 False
2 True
3 False
dtype: bool
isnullと逆関数
string_data = pd.Series(['apple','banana',np.nan,'orange'])
print(string_data.notnull())
0 True
1 True
2 False
3 True
dtype: bool
2.欠落した値dropnaをフィルタリングデフォルトでは欠落した値を含む行が削除されます.DataFrameオブジェクトを処理する場合、Seriesよりも複雑になります.DataFrameには行と列があるため、dropnaにパラメータを入力して異なるニーズを満たすことができます.
data = pd.DataFrame(np.arange(16).reshape(4,4))
data.iloc[1,1:] = np.nan
data.iloc[2,:] = np.nan
data.iloc[:,3] = np.nan
data[0][3] = np.nan
print(data)
0 1 2 3
0 0.0 1.0 2.0 NaN
1 4.0 NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN 13.0 14.0 NaN
dropnaにhow="all"が入力されると、すべての値がNAの行が削除されます.
print(data.dropna(how='all'))
0 1 2 3
0 0.0 1.0 2.0 NaN
1 4.0 NaN NaN NaN
3 NaN 13.0 14.0 NaN
dropnaにaxis=1が入力されると、削除された次元を行ごとに削除する、すなわち列を削除する(混同しやすい)
print(data.dropna(how='all',axis=1))
0 1 2
0 0.0 1.0 2.0
1 4.0 NaN NaN
2 NaN NaN NaN
3 NaN 13.0 14.0
df = pd.DataFrame(np.arange(21).reshape(7,3))
df.iloc[:4,1] = np.nan
df.iloc[:2,2] = np.nan
print(df)
0 1 2
0 0 NaN NaN
1 3 NaN NaN
2 6 NaN 8.0
3 9 NaN 11.0
4 12 13.0 14.0
5 15 16.0 17.0
6 18 19.0 20.0
dropnaにthresh=2を入力し、少なくとも2つの非NA値を含む行を出力する
print(df.dropna(thresh=2))
0 1 2
2 6 NaN 8.0
3 9 NaN 11.0
4 12 13.0 14.0
5 15 16.0 17.0
6 18 19.0 20.0
3.欠落値を補完するほとんどの場合、主にfillnaを使用して欠落値を補完します.次にfillnaのパラメータについて説明します.
fillnaを呼び出すと、欠落した値の代わりに定数/文字列を使用できます.
df = pd.DataFrame(np.arange(21).reshape(7,3),dtype=float)
df.iloc[:4,1] = np.nan
df.iloc[:2,2] = np.nan
print(df.fillna(99))
0 1 2
0 0.0 99.0 99.0
1 3.0 99.0 99.0
2 6.0 99.0 8.0
3 9.0 99.0 11.0
4 12.0 13.0 14.0
5 15.0 16.0 17.0
6 18.0 19.0 20.0
Fillnaを呼び出すときに辞書を使用し、異なる列に異なる塗りつぶし値を設定できます.
print(df.fillna({1:22,2:33}))
0 1 2
0 0.0 22.0 33.0
1 3.0 22.0 33.0
2 6.0 22.0 8.0
3 9.0 22.0 11.0
4 12.0 13.0 14.0
5 15.0 16.0 17.0
6 18.0 19.0 20.0
fillnaにmethod=‘ffill’またはmethod=‘bfill’を入力し、NA値を前の行または後の行の値に入力します.他のパラメータがない場合は、デフォルトは‘ffill’です.
print(df.fillna(method='bfill'))
0 1 2
0 0.0 13.0 8.0
1 3.0 13.0 8.0
2 6.0 13.0 8.0
3 9.0 13.0 11.0
4 12.0 13.0 14.0
5 15.0 16.0 17.0
6 18.0 19.0 20.0
Fillnaにaxis=1を入力、塗りつぶし方向を列ごとに塗りつぶす、すなわち横塗り(ここでは混同しやすい)に変換し、規定がなければaxis=0とデフォルトで設定する.
print(df.fillna(method='ffill',axis=1))
0 1 2
0 0.0 0.0 0.0
1 3.0 3.0 3.0
2 6.0 6.0 8.0
3 9.0 9.0 11.0
4 12.0 13.0 14.0
5 15.0 16.0 17.0
6 18.0 19.0 20.0
fillnaにlimitパラメータを入力して、順方向または後方向の充填時の最大の充填範囲を規定する
print(df.fillna(method='ffill',axis=1,limit=1))
0 1 2
0 0.0 0.0 NaN
1 3.0 3.0 NaN
2 6.0 6.0 8.0
3 9.0 9.0 11.0
4 12.0 13.0 14.0
5 15.0 16.0 17.0
6 18.0 19.0 20.0
_ = df.fillna(22,inplace=True)
print(df)
0 1 2
0 0.0 22.0 22.0
1 3.0 22.0 22.0
2 6.0 22.0 8.0
3 9.0 22.0 11.0
4 12.0 13.0 14.0
5 15.0 16.0 17.0
6 18.0 19.0 20.0