2015-03-30 2 views
7

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

+0

Звучит так, как будто вы хотите слить. Пожалуйста, покажите несколько примеров сценариев. –

+0

нашел! Я хотел использовать comb_first – user308827

+1

http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.combine_first.html – user308827

ответ

11

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

df[df.isnull()] = d2 

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

visual representation

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

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

Данные, поступающие постоянно, являются грязными, неполными или непоследовательными. Par для курса. Для решения этих ситуаций есть довольно обширные панды tutorial and associated cookbook.

5

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

df = df.combine_first(d2) 
3

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

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

A = B.mask(condition, A) 

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

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

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

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

Смежные вопросы