панды заменяют NaN на None проявляет нелогичное поведение - PullRequest
0 голосов
/ 03 января 2019

Для данной серии

s = pd.Series([1.1, 1.2, np.nan])
s
0    1.1
1    1.2
2    NaN
dtype: float64

Если возникает необходимость конвертировать NaN в None (например, для работы с паркетами), то я бы хотел получить

0     1.1
1     1.2
2    None
dtype: object

Я бы предположил, что Series.replace было бы очевидным способом сделать это, но вот что возвращает функция:

s.replace(np.nan, None)

0    1.1
1    1.2
2    1.2
dtype: float64

NaN был заполнен вперед, а не заменен.Проходя через docs , я вижу, что если вторым аргументом является None, то первым аргументом должен быть словарь.Исходя из этого, я бы ожидал, что replace либо заменит по назначению, либо выдаст исключение.

Я считаю, что обходной путь здесь

pd.Series([x if pd.notna(x) else None for x in s], dtype=object) 
0     1.1
1     1.2
2    None
dtype: object

Что хорошо.Но я хотел бы понять, почему это происходит, документировано ли это, или это просто ошибка, и мне нужно стереть свой профиль git и зарегистрировать его на трекере ... какие-нибудь идеи?

1 Ответ

0 голосов
/ 03 января 2019

Это поведение приведено в документации параметра method:

method : {‘pad’, ‘ffill’, ‘bfill’, None}

The method to use when for replacement, when to_replace is a scalar, list or tuple and value is None.

Так что в вашем примере to_replace - это скаляр , а value - None.По умолчанию используется метод pad, из документации fillna :

pad / ffill: propagate last valid observation forward to next valid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...