Заполнение значений NaN в матрице с использованием блоков случайной высоты ⇐ Python
Заполнение значений NaN в матрице с использованием блоков случайной высоты
У меня есть кадр данных размером 5x5 ниже:
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 НЭН 0,0 НЭН 2 0,0 0,0 НЭН 0,0 НЭН 3 0,0 НЭН 0,0 НЭН НЭН 4 0,0 НЭН 0,0 НЭН НЭН Пытаюсь создать функцию, которая принимает указанный выше фрейм данных и параметр num_blocks, а затем заполняет значения nan в каждом столбце блоками чисел случайной высоты. Вот шаги:
[*]
Проверьте, сколько столбцов имеют значение nan
Если это число меньше num_blocks, поднимите ошибку, чтобы увеличить количество num_blocks [*]
Проверьте, превышает ли num_blocks общее количество NaN в кадре данных
Если это число больше, чем num_blocks, поднимите ошибку, чтобы уменьшить количество num_blocks [*]
В противном случае заполните значения nan в блоках чисел, которые счетчик увеличивается при переходе к следующему столбцу. Блоки могут иметь произвольную высоту, которая должна находиться в пределах этих пользовательских параметров min_height=1 и max_height
если num_blocks=4, min_height=1, max_height=5 dataframe должен выглядеть так (это самый простой случай):
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 2 0,0 4 2 0,0 0,0 2 0,0 4 3 0,0 1 0,0 3 4 4 0,0 1 0,0 3 4
если num_blocks=5, min_height=1, max_height=5 dataframe должен выглядеть примерно так:
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 2 0,0 5 2 0,0 0,0 2 0,0 5 3 0,0 1 0,0 3 5 4 0,0 1 0,0 4 5
или может выглядеть примерно так:
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 2 0,0 4 2 0,0 0,0 2 0,0 5 3 0,0 1 0,0 3 5 4 0,0 1 0,0 3 5
или может выглядеть примерно так... и т. д.:
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 3 0,0 5 2 0,0 0,0 3 0,0 5 3 0,0 1 0,0 4 5 4 0,0 2 0,0 4 5
если num_blocks=8, min_height=1, max_height=5
dataframe должен выглядеть примерно так:
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 3 0,0 7 2 0,0 0,0 4 0,0 7 3 0,0 1 0,0 5 8 4 0,0 2 0,0 6 8
или может выглядеть примерно так... и т. д.:
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 3 0,0 6 2 0,0 0,0 4 0,0 6 3 0,0 1 0,0 5 7 4 0,0 2 0,0 5 8
И если изменить min_height и max_height для фрейма данных, который имеет больше NaN: если num_blocks=7, min_height=2, max_height=4 возможно, так может выглядеть фрейм данных:
A B C D E 0 НЭН 0,0 0,0 0,0 0,0 1 НЭН 0,0 НЭН 0,0 НЭН 2 NaN NaN NaN 0,0 NaN 3 NaN NaN NaN NaN NaN 4 0,0 НЭН 0,0 НЭН НЭН A B C D E 0 1 0,0 0,0 0,0 0,0 1 1 0,0 4 0,0 6 2 2 3 4 0,0 6 3 2 3 4 5 7 4 0,0 3 0,0 5 7 Вот что я пытался:
импортировать панд как pd защита fill_nans(df, num_blocks): # Получить столбцы со значениями NaN nan_columns = df.columns[df.isna().any()].tolist() значение_заполнения = 1 # Перебираем столбцы NaN и постепенно заполняем значения для столбца в nan_columns: # Получить индекс значений NaN для текущего столбца nan_idx = df[df[col].isna()].index для idx в nan_idx: df.at[idx, col] = значение_заполнения значение_заполнения += 1 # Сброс значения fill_value, если оно превышает num_blocks если fill_value > num_blocks: значение_заполнения = 1 возврат DF # Пример фрейма данных данные = { 'А': [0,0, 0,0, 0,0, 0,0, 0,0], 'B': [0,0, 0,0, 0,0, Нет, Нет], 'C': [0,0, Нет, Нет, 0,0, 0,0], 'D': [0,0, 0,0, 0,0, Нет, Нет], 'E': [0.0, Нет, Нет, Нет, Нет] } df = pd.DataFrame(данные) print("Исходный фрейм данных:") печать (дф) print("\nDataFrame после заполнения NaN:") df_filled = fill_nans(df, 8) печать (df_filled)
У меня есть кадр данных размером 5x5 ниже:
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 НЭН 0,0 НЭН 2 0,0 0,0 НЭН 0,0 НЭН 3 0,0 НЭН 0,0 НЭН НЭН 4 0,0 НЭН 0,0 НЭН НЭН Пытаюсь создать функцию, которая принимает указанный выше фрейм данных и параметр num_blocks, а затем заполняет значения nan в каждом столбце блоками чисел случайной высоты. Вот шаги:
[*]
Проверьте, сколько столбцов имеют значение nan
Если это число меньше num_blocks, поднимите ошибку, чтобы увеличить количество num_blocks [*]
Проверьте, превышает ли num_blocks общее количество NaN в кадре данных
Если это число больше, чем num_blocks, поднимите ошибку, чтобы уменьшить количество num_blocks [*]
В противном случае заполните значения nan в блоках чисел, которые счетчик увеличивается при переходе к следующему столбцу. Блоки могут иметь произвольную высоту, которая должна находиться в пределах этих пользовательских параметров min_height=1 и max_height
если num_blocks=4, min_height=1, max_height=5 dataframe должен выглядеть так (это самый простой случай):
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 2 0,0 4 2 0,0 0,0 2 0,0 4 3 0,0 1 0,0 3 4 4 0,0 1 0,0 3 4
если num_blocks=5, min_height=1, max_height=5 dataframe должен выглядеть примерно так:
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 2 0,0 5 2 0,0 0,0 2 0,0 5 3 0,0 1 0,0 3 5 4 0,0 1 0,0 4 5
или может выглядеть примерно так:
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 2 0,0 4 2 0,0 0,0 2 0,0 5 3 0,0 1 0,0 3 5 4 0,0 1 0,0 3 5
или может выглядеть примерно так... и т. д.:
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 3 0,0 5 2 0,0 0,0 3 0,0 5 3 0,0 1 0,0 4 5 4 0,0 2 0,0 4 5
если num_blocks=8, min_height=1, max_height=5
dataframe должен выглядеть примерно так:
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 3 0,0 7 2 0,0 0,0 4 0,0 7 3 0,0 1 0,0 5 8 4 0,0 2 0,0 6 8
или может выглядеть примерно так... и т. д.:
A B C D E 0 0,0 0,0 0,0 0,0 0,0 1 0,0 0,0 3 0,0 6 2 0,0 0,0 4 0,0 6 3 0,0 1 0,0 5 7 4 0,0 2 0,0 5 8
И если изменить min_height и max_height для фрейма данных, который имеет больше NaN: если num_blocks=7, min_height=2, max_height=4 возможно, так может выглядеть фрейм данных:
A B C D E 0 НЭН 0,0 0,0 0,0 0,0 1 НЭН 0,0 НЭН 0,0 НЭН 2 NaN NaN NaN 0,0 NaN 3 NaN NaN NaN NaN NaN 4 0,0 НЭН 0,0 НЭН НЭН A B C D E 0 1 0,0 0,0 0,0 0,0 1 1 0,0 4 0,0 6 2 2 3 4 0,0 6 3 2 3 4 5 7 4 0,0 3 0,0 5 7 Вот что я пытался:
импортировать панд как pd защита fill_nans(df, num_blocks): # Получить столбцы со значениями NaN nan_columns = df.columns[df.isna().any()].tolist() значение_заполнения = 1 # Перебираем столбцы NaN и постепенно заполняем значения для столбца в nan_columns: # Получить индекс значений NaN для текущего столбца nan_idx = df[df[col].isna()].index для idx в nan_idx: df.at[idx, col] = значение_заполнения значение_заполнения += 1 # Сброс значения fill_value, если оно превышает num_blocks если fill_value > num_blocks: значение_заполнения = 1 возврат DF # Пример фрейма данных данные = { 'А': [0,0, 0,0, 0,0, 0,0, 0,0], 'B': [0,0, 0,0, 0,0, Нет, Нет], 'C': [0,0, Нет, Нет, 0,0, 0,0], 'D': [0,0, 0,0, 0,0, Нет, Нет], 'E': [0.0, Нет, Нет, Нет, Нет] } df = pd.DataFrame(данные) print("Исходный фрейм данных:") печать (дф) print("\nDataFrame после заполнения NaN:") df_filled = fill_nans(df, 8) печать (df_filled)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как найти группы последовательных значений, а не значений NaN в списке
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-