Добавление двух объектов pandas.series - программирование
Подтвердить что ты не робот

Добавление двух объектов pandas.series

Я работаю над "Python for Data Analysis", и я не понимаю конкретной функции. Добавление двух объектов серии pandas автоматически выравнивает индексированные данные, но если один объект не содержит этот индекс, он возвращается как NaN. Например, из книги:

    a = Series([35000,71000,16000,5000],index=['Ohio','Texas','Oregon','Utah'])
    b = Series([NaN,71000,16000,35000],index=['California', 'Texas', 'Oregon', 'Ohio'])

Результат:

    In [63]: a
    Out[63]: Ohio          35000
             Texas         71000
             Oregon        16000
             Utah           5000
    In [64]: b
    Out[64]: California      NaN
             Texas         71000
             Oregon        16000
             Ohio          35000

Когда я добавляю их вместе, я получаю это...

    In [65]: a+b
    Out[65]: California       NaN
             Ohio           70000
             Oregon         32000
             Texas         142000
             Utah             NaN

Итак, почему значение Юты NaN, а не 500? Кажется, что 500 + NaN = 500. Что дает? Я что-то пропустил, объясните.

Update:

    In [92]: # fill NaN with zero
             b = b.fillna(0)
             b
    Out[92]: California        0
             Texas         71000
             Oregon        16000
             Ohio          35000

    In [93]: a
    Out[93]: Ohio      35000
             Texas     71000
             Oregon    16000
             Utah       5000

    In [94]: # a is still good
             a+b
    Out[94]: California       NaN
             Ohio           70000
             Oregon         32000
             Texas         142000 
             Utah             NaN
4b9b3361

Ответ 1

Pandas не предполагает, что 500 + NaN = 500, но его легко попросить: a.add(b, fill_value=0)

Ответ 2

По умолчанию предполагается, что любое вычисление с использованием NaN дает результат NaN. Все, что угодно, NaN - NaN, все, что делится NaN, - NaN и т.д. Если вы хотите наполнить NaN некоторой ценностью, вы должны сделать это явно (как показал Дэн Аллан в своем ответе).