web-dev-qa-db-ja.com

NAの値をa pandasデータフレームにランダムに挿入します

DataFrameにnp.nanをランダムに挿入するにはどうすればよいですか? DataFrame内に10%のnull値が必要だとします。

私のデータは次のようになります:

df = pd.DataFrame(np.random.randn(5, 3), 
                  index=['a', 'b', 'c', 'd', 'e'],
                  columns=['one', 'two', 'three'])

        one       two     three
a  0.695132  1.044791 -1.059536
b -1.075105  0.825776  1.899795
c -0.678980  0.051959 -0.691405
d -0.182928  1.455268 -1.032353
e  0.205094  0.714192 -0.938242

Null値を挿入する簡単な方法はありますか?

15
mitsi

これは、セルの正確に10%をクリアする方法です(つまり、既存のデータフレームのサイズで達成できる限り10%に近い)。

import random
ix = [(row, col) for row in range(df.shape[0]) for col in range(df.shape[1])]
for row, col in random.sample(ix, int(round(.1*len(ix)))):
    df.iat[row, col] = np.nan

これは、セルあたりの確率が10%のセルを個別にクリアする方法です。

df = df.mask(np.random.random(df.shape) < .1)
15
Kodiologist

データフレームの列を簡単に繰り返し処理し、 pandas.DataFrame.sample() メソッドによって生成されたすべてのセルにNaN値を割り当てることができます。

コードは次のとおりです。

for col in df.columns:
    df.loc[df.sample(frac=0.1).index, col] = pd.np.nan
0