Замена значений NaN в кадре данных Pands различными случайными равномерными переменными - PullRequest
2 голосов
/ 12 апреля 2019

У меня равномерное распределение в столбце данных pandas с несколькими значениями NaN, которые я хотел бы заменить.

Поскольку данные распределены равномерно, я решил, что хотел бы заполнить нулевые значения случайными равномерными выборками, взятыми из диапазона минимальных и максимальных значений столбца. Я использовал следующий код для получения случайной равномерной выборки:

df_copy['ep'] = df_copy['ep'].fillna(value=np.random.uniform(3, 331))

Конечно, использование pd.DafaFrame.fillna() заменяет все существующие NaN на одно и то же значение. Я бы хотел, чтобы каждый NaN имел разные значения. Я предполагаю, что цикл for мог бы выполнить работу, но не уверен, как создать такой цикл, чтобы конкретно обрабатывать эти значения NaN. Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Использование boolean indexing с DataFrame.loc:

m = df_copy['ep'].isna()

df_copy.loc[m, 'ep'] = np.random.uniform(3, 331, size=m.sum())
2 голосов
/ 12 апреля 2019

Если похоже, что вы делаете это для серии (столбца), но та же реализация будет работать для DataFrame:

Пример данных:

series = pd.Series(range(100))

series.loc[2] = np.nan
series.loc[10:15] = np.nan

Решение:

series.mask(series.isnull(), np.random.uniform(3, 331, size=series.shape))
...