Панды заполняют отсутствующие значения в dataframe из другого фрейма данных

Я не могу найти функцию pandas (что я видел раньше), чтобы заменить NaN в фрейме данных значениями из другого фрейма данных (при условии, что общий индекс может быть указан). Любая помощь?

Если у вас есть два DataFrames одинаковой формы, тогда:

 df[df.isnull()] = d2 

Будет делать трюк.

Визуальное представление

Только места, где df.isnull() оценивает значение True (выделено зеленым цветом), будут иметь право на назначение.

На практике, DataFrames не всегда одинакового размера / формы, и методы преобразования (особенно .shift() ) полезны.

Входящие данные неизменно грязные, неполные или непоследовательные. Par для курса. Там есть довольно обширный учебник по пандам и связанная с ним кулинарная книга для решения этих ситуаций.

Как я только что узнал, существует метод DataFrame.combine_first() , который делает именно это, с дополнительным свойством, которое, если ваш фрейм данных обновления d2 больше, чем ваш исходный df , добавляются дополнительные строки и столбцы.

 df = df.combine_first(d2) 

DataFrame.combine_first () точно отвечает на этот вопрос.

Тем не менее, иногда вы хотите заполнить / заменить / перезаписать некоторые из не пропущенных (не NaN) значений DataFrame A со значениями из DataFrame B. Этот вопрос привел меня на эту страницу, и решением является DataFrame.mask ()

 A = B.mask(condition, A) 

Когда condition истинно, будут использоваться значения из A, иначе значения B будут использоваться.

Например, вы можете решить исходный вопрос OP с помощью mask , чтобы, когда элемент из A не является NaN, используйте его, иначе используйте соответствующий элемент из B.

Но используя DataFrame.mask (), вы можете заменить значения A, которые не соответствуют произвольным критериям (меньше нуля более 100?) Со значениями из B. Таким образом, mask более гибкая и переполняет эту проблему, но я подумал это было достойно упоминания (мне нужно было решить мою проблему).

Также важно отметить, что B может представлять собой массив numpy вместо DataFrame. DataFrame.combine_first () требует, чтобы B был DataFrame, но DataFrame.mask () просто требует, чтобы B был NDFrame и его размеры соответствовали размерам A.