Панды: заполнение случайных пустых строк данными - PullRequest
0 голосов
/ 29 июня 2018

У меня есть фрейм данных с несколькими в настоящее время пустыми столбцами. Я хочу, чтобы часть из них была заполнена данными, полученными из нормального распределения, а все остальное оставлено пустым. Так, например, если 60% элементов должны быть пустыми, то будет 60%, а остальные 40% будут заполнены. У меня уже есть нормальное распределение через NumPy, но я пытаюсь выяснить, как выбрать случайные строки для заполнения. В настоящее время я могу думать только о циклах FOR, и я бы предпочел этого избежать.

У кого-нибудь есть идеи, как я мог бы заполнять пустые элементы кадра данных случайным образом? У меня есть немного кода ниже, для случайных чисел.

data.loc[data['ColumnA'] == 'B', 'ColumnC'] = np.random.normal(1000, 500, rowsB).astype('int64')

1 Ответ

0 голосов
/ 30 июня 2018

совет piRSquared хорош. Нам остается гадать, что решать. Только что просмотрев некоторые из последних оставшихся без ответа вопросов о пандах, они стали еще хуже.

import pandas as pd
import numpy as np

#some redundancy here as i make an empty dataframe -pretending i start like you with a Dataframe.
df = pd.DataFrame(index = range(11),columns=list('abcdefg'))
num_cells = np.product(df.shape)

# make a 2-dim array with number from 1 to number cells.
arr =np.arange(1,num_cells+1)

#inplace shuffle - this is the key randomization operation
np.random.shuffle(arr)   

arr = arr.reshape(df.shape) 

#place the shuffled values, normalized to the number of cells, into my dateframe.
df = pd.DataFrame(index = df.index,columns = df.columns,data=arr/np.float(num_cells))

#use applymap to set keep 40% of cells as ones, the other 60% as nan.
df = df.applymap(lambda x: 1 if x > 0.6 else np.nan)

# now sample a full set from normal distribution
# but when multiplying the nans will cause the sampled value to nullify, whilst the multiply by 1 will retain the sample value.
df * np.random.normal(1000,500,df.shape)

Таким образом, у вас остается 40% случайных ячеек, содержащих ничью из вашего обычного распределения.

enter image description here

Если ваш фрейм данных был большим, вы можете предполагать стабильность функции равномерного rand (). Здесь я этого не делал и довольно точно определил, сколько ячеек выше и ниже порога.

...