Предположим, у меня есть DataFrame с некоторыми NaN
s:
>>> import pandas as pd
>>> df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]])
>>> df
0 1 2
0 1 2 3
1 4 NaN NaN
2 NaN NaN 9
Что мне нужно сделать, так это заменить each NaN
на первое не NaN
значение в том же столбце над ним. Предполагается, что первая строка никогда не будет содержать NaN
. Итак, для предыдущего примера результатом будет
0 1 2
0 1 2 3
1 4 2 3
2 4 2 9
Я могу просто просмотреть весь DataFrame столбец за столбцом, элемент за элементом и установить значения напрямую, но есть ли простой (оптимально свободный от цикла) способ добиться этого?
Принятый ответ идеален. У меня была похожая, но немного другая ситуация, когда мне приходилось заменять форварда, но только внутри группы. Если у кого-то такая же потребность, знайте, что fillna работает с объектом DataFrameGroupBy.
источник
Вы можете использовать
pandas.DataFrame.fillna
сmethod='ffill'
опцией.'ffill'
означает «заполнение вперед» и будет распространять последнее действительное наблюдение вперед. Альтернатива - это то,'bfill'
что работает так же, но наоборот.Для
pandas.DataFrame.ffill
упрощения существует также функция прямого синонима .источник
Одна вещь, которую я заметил, пробуя это решение, заключается в том, что если у вас есть N / A в начале или в конце массива, функции ffill и bfill не совсем работают. Вам нужны оба.
источник
ffill
теперь есть собственный методpd.DataFrame.ffill
источник
Только версия с одной колонкой
источник
Просто согласен с
ffill
методом, но одна дополнительная информация заключается в том, что вы можете ограничить прямое заполнение аргументом ключевого словаlimit
.Теперь с
limit
аргументом ключевого словаисточник
В моем случае у нас есть временные ряды с разных устройств, но некоторые устройства не могли отправлять какие-либо значения в течение определенного периода. Поэтому мы должны создать значения NA для каждого устройства и периода времени, а затем выполнить fillna.
Результат:
источник
Вы можете использовать
fillna
для удаления или замены значений NaN.NaN Удалить
NaN заменить
Ссылка pandas.DataFrame.fillna
источник