パンダ不足値処理-task01

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不足している値の入力

  1. 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のみを入力します(外挿)。

参照

[1] datawhalechina / joyful-pandas

おすすめ

転載: blog.csdn.net/hu_hao/article/details/106892429