September 30, 2022

Особенности операции заполнения данных с reindex

Для проведении операции по несовпадающим индексам часто пользуются методом reindex, поведение которого в условиях наличия пропусков может показаться неожиданным. Создадим и суммируем две серии:

import pandas as pd
import numpy as np

ser = pd.Series([1,2,np.nan,3], index=['one', 'two', 'three', 'four'])
ser_add = pd.Series([1,2,np.nan,3], index=['three','four', 'five', 'six'])

ser+ser_add

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

combo_index = ser.index.union(ser_add.index)
combo_index

Дальше переиндексировать серии по новому индексу и заполнить пропуски нулем. Для последней операции часто используют аргумент fill_value:

ser.reindex(combo_index, fill_value=0) + ser_add.reindex(combo_index, fill_value=0)

Как можно заметить, с fill_value не происходит заполнение первичных пропусков, которые имелись до переиндексации серии. Поэтому правильнее было сделать так:

ser.reindex(combo_index).fillna(0) + ser_add.reindex(combo_index).fillna(0)

Поэтому помните, что fill_value заполняет только пропуски полученные в результате переиндексации и пользуйтесь fillna.