パンダ不足値処理
1.不足している値の種類
パンダには、np.nan、None、および時間ベースの欠落値タイプ、NaTの3つのタイプの欠落値があります。これらの3つのタイプについて、以下で個別に説明します。
1.1ハゲnp.nan
1つ目はnp.nanです。パンダはNumpyに基づいているため、欠落値タイプのNumpyは、パンダの最も一般的な欠落値クラスです。しかし、このnp.nanには多くの問題があり、次の点に分けられます。
- 1.状態判断の問題。np.nanは何にも等しくありません。実際、それはそれ自体と等しくないことを意味します。文字、「a」は「a」に等しいだけですが、np.nanに遭遇した場合は、リストをループして値npを見つけます。 nan列には、次の場合に使用します。i== np.nan:申し訳ありませんが、これは見つかりません。np.nanに等しい値の要素はありません。これは、見つかりません。
- 2.データタイプの変更の問題。np.nanは列のデータ型を変更します。np.nanにはデータ型があり、float(64)です。整数にnp.nanの欠落値が含まれている場合、列は浮動小数点になります。np.nanが含まれているboolタイプのデータ列の場合、自動的にTrueで埋められます。(通常、それはFalseであるはずですが、これはパンダの設計原則を理解するのが非常に困難です)。ただし、ブールリストを変更する場合は、np.nanに値を割り当てます。これは、np.nan自体が浮動小数点データであるため、リストタイプが浮動小数点に変更され、元のTrueが1.0になりますが、割り当て場所はnp.nan。文字データ列の場合、np.nanが含まれていると、文字タイプを浮動小数点タイプに変換できないため、列のデータはオブジェクトタイプになります。これは、データタイプの混乱の主な原因です。
1.2問題の少ないなし
np.nanより優れているものはありません。次の点があります。
- 1.それ自体と同じにすることができます。Trueを取得するにはNone == Noneを使用します
- 2. boolean値自体はFalseです。boolデータタイプに割り当てる場合、元のデータタイプは変更されません。
なしnull値タイプ。データ列に数値タイプのデータがある場合、Noneはnp.nanになります。
データタイプがオブジェクトの場合のみ、Noneはそのデータタイプを保持します。
- pandasのデフォルトのnull値はnp.nanであるため、人工的に名前が付けられている場合にのみ表示されます。
1.3時間不足アイテムNaT
np.nanであろうとNoneであろうと、時間タイプに欠落値がある場合、それはNaTに変換されます。これは、時間欠落値の特別な欠落値タイプです。
2.新機能
2.1ヌル可能データタイプ
元のパンダ、パンダ1.0で新しく導入されたInt64、boolean、string、3つの新しいデータタイプの欠落値データタイプによって引き起こされる問題を解決するために、これら3つのデータタイプはNullableデータと呼ばれ、欠落値の統合管理があります。
s_new = pd.Series([1, 2], dtype="Int64")
s_new[1] = np.nan
s_new
0 1
1 <NA>
dtype: Int64
新しいデータタイプでは、欠落している値はとして均一に表示され、値のタイプは変更されません
s_new[1] = None
s_new
0 1
1 <NA>
dtype: Int64
これらの3つのデータタイプの特徴は、欠落している値がデータタイプを変更しないことです。
さらに、stringlタイプのデータの場合、オブジェクトタイプとの重要な違いは、characterメソッドを呼び出した後、stringタイプがNullableタイプを返し、欠落しているタイプとデータタイプに応じてオブジェクトが変化することです。
2.2データ変換のために導入された新機能
convert_dtypesメソッド
この関数の関数は、多くの場合、データを読み取るときにデータ列をNullableタイプに変換することです。これは1.0の新しい関数であり、非常に便利に使用できます。
pd.read_csv('data/table_missing.csv').convert_dtypes().dtypes
Out[73]:
School string
Class string
ID Int64
Gender string
Address string
Height Int64
Weight Int64
Math float64
Physics string
dtype: object
3.動作特性と欠落値の入力
3.1欠損値の統計的動作特性
合計関数を使用してデータ統計を実行する場合、欠落値は0として計算され、乗算は1として計算され、それ以外の場合、欠落値はスキップされます。
3.2不足している値の入力
- fillnaメソッド
(a)値の入力と順方向および逆方向の入力(それぞれffillメソッドとbfillメソッドに相当)
値の入力
df['Physics'].fillna('missing').head()
0 A+
1 B+
2 B+
3 missing
4 A-
Name: Physics, dtype: object
前後に記入
#ffill 表示使用缺失值前一个非缺失值的数据填充,bfill则表示后一个值
df['Physics'].fillna(method='ffill').head()
(B)塗りつぶしの位置合わせ機能
ここでの位置合わせ機能とは、返された結果の列のみを塗りつぶすことを指します。
2. dropnaメソッド
dropnaメソッドには、軸軸の方向、削除方法、および判定領域サブセット
(a)axis = 0,1の3つのパラメーターがあり、行ごとに表示するか列ごとに表示するかを示します。
df_d = pd.DataFrame({
'A':[np.nan,np.nan,np.nan],'B':[np.nan,3,2],'C':[3,2,1]})
df_d.dropna(axis=0)
A B C
0 NaN NaN 3
1 NaN 3.0 2
2 NaN 2.0 1
A B C
各行に値がないため、返される結果は空です。
(b)パラメータの方法(すべてまたはいずれかを選択できます。つまり、すべての削除が削除され、既存の削除が削除されます)
In [89]:
df_d.dropna(axis=1,how='all')
Out[89]:
B C
0 NaN 3
1 3.0 2
2 2.0 1
(C)サブセットパラメータ(つまり、特定の列範囲のセットで欠落している値を検索します)
In [90]:
df_d.dropna(axis=0,subset=['B','C'])
Out[90]:
A B C
1 NaN 3.0 2
2 NaN 2.0 1
3.3線形補間およびその他の補間
(A)インデックスに依存しない線形補間
デフォルトでは、interpolateは欠落している値に対して線形補間を実行します
In [91]:
s = pd.Series([1,10,15,-5,-2,np.nan,np.nan,28])
s
Out[91]:
0 1.0
1 10.0
2 15.0
3 -5.0
4 -2.0
5 NaN
6 NaN
7 28.0
dtype: float64
この補間方法はインデックスとは関係がなく、非線形の結果を引き起こします
s.interpolate()
Out[92]:
0 1.0
1 10.0
2 15.0
3 -5.0
4 -2.0
5 8.0
6 18.0
7 28.0
dtype: float64
時間インデックスまたはインデックスを追加すると、真の線形補間結果が得られます
s.interpolate(method='index').plot()
インデックスが時間の場合
s_t = pd.Series([0,np.nan,10]
,index=[pd.Timestamp('2012-05-01'),pd.Timestamp('2012-05-07'),pd.Timestamp('2012-06-03')])
s_t.interpolate(method='time')
- 高度な補間方法
ここでの高度なとは、スプライン補間、多項式補間、秋間補間などの線形補間との比較を指します(Scipyをインストールする必要があります)。
ser = pd.Series(np.arange(1, 10.1, .25) ** 2 + np.random.randn(37))
missing = np.array([4, 13, 14, 15, 16, 17, 18, 20, 29])
ser[missing] = np.nan
methods = ['linear', 'quadratic', 'cubic']
df = pd.DataFrame({
m: ser.interpolate(method=m) for m in methods})
df.plot()
補間
(a)制限のいくつかのパラメーター設定は、最大でいくつ挿入するかを示します
s = pd.Series([1,np.nan,np.nan,np.nan,5])
s.interpolate(limit=2)
0 1.0
1 2.0
2 3.0
3 NaN
4 5.0
dtype: float64
(B)limit_directionは、順方向、逆方向の補間方向を表します。どちらもオプションで、デフォルトは順方向です。
s = pd.Series([np.nan,np.nan,1,np.nan,np.nan,np.nan,5,np.nan,np.nan,])
s.interpolate(limit_direction='backward')
0 1.0
1 1.0
2 1.0
3 2.0
4 3.0
5 4.0
6 5.0
7 NaN
8 NaN
dtype: float64
(C)補間領域パラメータ設定
s = pd.Series([np.nan,np.nan,1,np.nan,np.nan,np.nan,5,np.nan,np.nan,])
s.interpolate(limit_area='inside')
0 NaN
1 NaN
2 1.0
3 2.0
4 3.0
5 4.0
6 5.0
7 NaN
8 NaN
dtype: float64
「なし」:充填制限はありません。'inside':有効な値で囲まれたNaN(補間)のみを入力します。'External':有効な値の外側のNaNのみを入力します(外挿)。