pd.NA против np.nan для pandas - PullRequest
       3

pd.NA против np.nan для pandas

2 голосов
/ 07 февраля 2020

pd.NA против np.nan для pandas. Какой использовать с pandas и зачем использовать? Каковы основные преимущества и недостатки каждого из них с pandas?

Некоторые примеры кода, которые используют их оба:

import pandas as pd
import numpy as np

df = pd.DataFrame({ 'object': ['a', 'b', 'c',pd.NA],
                   'numeric': [1, 2, np.nan , 4],
                    'categorical': pd.Categorical(['d', np.nan,'f', 'g'])
                 })

вывод:

|    | object   |   numeric | categorical   |
|---:|:---------|----------:|:--------------|
|  0 | a        |         1 | d             |
|  1 | b        |         2 | nan           |
|  2 | c        |       nan | f             |
|  3 | <NA>     |         4 | g             |

Ответы [ 3 ]

3 голосов
/ 07 февраля 2020

Согласно документам

Целью pd.NA является предоставление «отсутствующего» индикатора, который можно было бы последовательно использовать для типов данных

Так что, если у вас есть столбец с несколькими типами dtypes, используйте pd.NA, в противном случае np.nan должно быть в порядке.

Однако, поскольку pd.NA, кажется, обладает той же функциональностью, что и np.nan, это может быть просто Лучше использовать pd.NA для всех ваших нанотехнологий

Только один импорт сейчас

3 голосов
/ 07 февраля 2020

pd.NA был представлен в последнем выпуске pandas-1.0.0.

Я бы рекомендовал использовать его поверх np.nan, поскольку он содержится в библиотеке pandas. лучше всего работать с DataFrames.

2 голосов
/ 14 апреля 2020

На данный момент (выпуск pandas -1.0.0 ) я действительно рекомендую использовать его осторожно.

Во-первых, это все еще экспериментальный функция:

Экспериментальная: поведение pd.NA все еще может меняться без предупреждения.

Во-вторых, поведение отличается от np.nan:

По сравнению с np.nan, pd.NA ведет себя по-разному в определенных операциях. В дополнение к арифметическим c операциям pd.NA также распространяется как «отсутствующие» или «неизвестные» в операциях сравнения.

Обе квоты из заметки о выпуске

Чтобы показать дополнительный пример, я был удивлен поведением интерполяции:

Создайте простой DataFrame:

df = pd.DataFrame({"a": [0, pd.NA, 2], "b": [0, np.nan, 2]})
df
#       a    b
# 0     0  0.0
# 1  <NA>  NaN
# 2     2  2.0

и попробуйте интерполировать:

df.interpolate()
#       a    b
# 0     0  0.0
# 1  <NA>  1.0
# 2     2  2.0

Есть некоторые причины для этого (я все еще обнаруживаю это), во всяком случае, я просто хочу выделить эти различия - Это экспериментальная функция, и в некоторых случаях она ведет себя по-разному .

Я думаю, что это будет очень полезная функция, но я был бы очень осторожен с такими утверждениями, как "Это должно быть совершенно нормально использовать вместо np.nan". Это может быть верно для большинства случаев, но может вызвать некоторые проблемы, когда вы не знаете об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...