Pandas DataFrame で NaN を埋める方法 PlatoBlockchain データ インテリジェンス。垂直検索。あい。

PandasDataFrameにNaNを入力する方法

欠測値は一般的であり、人的エラー、機器エラー、別のチームからの処理、または特定の観測のデータの不足が原因で発生します。

このバイトでは、NaNを入力する方法を見ていきます。 DataFrame、NaNを埋めて処理することを選択した場合。

まず、モックを作成しましょう DataFrame いくつかのランダムな値が削除されました:

import numpy as np
array = np.random.randn(25, 3)
mask = np.random.choice([1, 0], array.shape, p=[.3, .7]).astype(bool)
array[mask] = np.nan

df = pd.DataFrame(array, columns=['Col1', 'Col2', 'Col3'])
        Col1      Col2      Col3 
0  -0.671603 -0.792415  0.783922
1   0.207720       NaN  0.996131
2  -0.892115 -1.282333       NaN
3  -0.315598 -2.371529 -1.959646
4        NaN       NaN -0.584636
5   0.314736 -0.692732 -0.303951
6   0.355121       NaN       NaN
7        NaN -1.900148  1.230828
8  -1.795468  0.490953       NaN
9  -0.678491 -0.087815       NaN
10  0.755714  0.550589 -0.702019
11  0.951908 -0.529933  0.344544
12       NaN  0.075340 -0.187669
13       NaN  0.314342 -0.936066
14       NaN  1.293355  0.098964

たとえば、XNUMX番目の列をプロットしてみましょう。

plt.plot(df['Col3'])

さまざまな手法で埋められた場合–このNaNで埋められたグラフは次のように置き換えることができます。

Pandas DataFrame で NaN を埋める方法 PlatoBlockchain データ インテリジェンス。垂直検索。あい。

fillna()–平均、中央値、最頻値

これらの値を新しい列に入力して、入力する列に割り当てるか、を使用してインプレースで割り当てることができます。 inplace 口論。 ここでは、検査を容易にするために、新しい列に入力された値を抽出します。

mean = df['Col3'].fillna(df['Col3'].mean(), inplace=False)
median = df['Col3'].fillna(df['Col3'].median(), inplace=False)
mode = df['Col3'].fillna(df['Col3'].mode(), inplace=False)

列の中央値、平均、最頻値は次のとおりです。 -0.187669, -0.110873 および 0.000000 これらの値は、各NaNにそれぞれ使用されます。 これは定数値で効果的に満たされ、入力される値は列の全体に依存します。

まず、中央値を入力すると、次のようになります。

Pandas DataFrame で NaN を埋める方法 PlatoBlockchain データ インテリジェンス。垂直検索。あい。

平均値の場合:

Pandas DataFrame で NaN を埋める方法 PlatoBlockchain データ インテリジェンス。垂直検索。あい。

モード値の場合:

Pandas DataFrame で NaN を埋める方法 PlatoBlockchain データ インテリジェンス。垂直検索。あい。

fillna()–定数値

代わりに定数値を入力することもできます。

ベストプラクティス、業界で認められた標準、および含まれているチートシートを含む、Gitを学習するための実践的で実用的なガイドを確認してください。 グーグルGitコマンドを停止し、実際に 学ぶ それ!

constant = df['Col3'].fillna(0, inplace=False

これにより、各NaNの代わりに定数値(0)が設定されます。 0 は中央値と平均に近く、最頻値に等しいため、入力された値は、模擬データセットのその方法によく似ています。

0     0.783922
1     0.996131
2     0.000000
3    -1.959646
4    -0.584636
5    -0.303951
6     0.000000
7     1.230828
8     0.000000
9     0.000000
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

Pandas DataFrame で NaN を埋める方法 PlatoBlockchain データ インテリジェンス。垂直検索。あい。

fillna()–順方向および逆方向の塗りつぶし

各行で–次の前または後の行から値を取得して、順方向または逆方向の塗りつぶしを実行できます。

ffill = df['Col3'].fillna(method='ffill')
bfill = df['Col3'].fillna(method='bfill')

フォワードフィルでは、行2が欠落しているため、行1の値がXNUMX番目の値を埋めるために使用されます。 値は前方に伝播します。

0     0.783922
1     0.996131
2     0.996131
3    -1.959646
4    -0.584636
5    -0.303951
6    -0.303951
7     1.230828
8     1.230828
9     1.230828
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

Pandas DataFrame で NaN を埋める方法 PlatoBlockchain データ インテリジェンス。垂直検索。あい。

逆充填では、逆のことが起こります。 行2は、行3の値で埋められます。

0     0.783922
1     0.996131
2    -1.959646
3    -1.959646
4    -0.584636
5    -0.303951
6     1.230828
7     1.230828
8    -0.702019
9    -0.702019
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

Pandas DataFrame で NaN を埋める方法 PlatoBlockchain データ インテリジェンス。垂直検索。あい。

ただし、複数ある場合 NaN 順番に–これらはうまく機能せず、NaNをさらに下にカスケードして、データを歪め、実際に記録された値を削除する可能性があります。

interpolate()

  interpolate() メソッドは値の補間をSciPyに委任します 値を補間するための一連のメソッド。 それは、以下を含む多種多様な議論を受け入れます。 nearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial, krogh, piecewise_polynomial, spline, pchip, akima, cubicspline, etc.

補間は、以前の方法のように定数または半変数で値を入力するよりもはるかに柔軟で「スマート」です。

補間は、次のような他の方法では不可能な方法でシーケンスを適切に埋めることができます。

s = pd.Series([0, 1, np.nan, np.nan, np.nan, 5])
s.fillna(s.mean()).values

s.fillna(method='ffill').values

s.interpolate().values

デフォルトの補間は線形であり、 1...5 おそらく 1, 2, 3, 4, 5 シーケンスはそれほどフェッチされていません(ただし、保証されていません)。 ここでは、一定の充填と順方向または逆方向の充填の両方が惨めに失敗します。 一般的に言えば、ノイズの多い信号や破損したデータセットでNaNを埋める場合、補間は通常、良い友達になります。

補間のタイプを試してみると、より良い結果が得られる場合があります。

ここにXNUMXつの補間方法があります(splice および polynomial が必要です order 口論):

nearest = df['Col3'].interpolate(method='nearest')
polynomial = df['Col3'].interpolate(method='polynomial', order=3)

これらの結果は次のとおりです。

Pandas DataFrame で NaN を埋める方法 PlatoBlockchain データ インテリジェンス。垂直検索。あい。

と:

Pandas DataFrame で NaN を埋める方法 PlatoBlockchain データ インテリジェンス。垂直検索。あい。

タイムスタンプ:

より多くの スタックアバス