Тип данных целого числа с возможностью отсутствующего значения
Новое в версии 0.24.0.
Примечание
IntegerArray в настоящее время находится на стадии эксперимента. Его API или реализация могут быть изменены без предупреждения.
В работе с отсутствующими данными мы увидели, что pandas в основном использует NaN для представления отсутствующих данных. Поскольку NaN является типом с плавающей запятой, это приводит к тому, что массив целых чисел с любыми отсутствующими значениями становится массивом с плавающей запятой. В некоторых случаях это может не иметь большого значения. Но если ваш столбец целых чисел, например, идентификатор, преобразование в тип с плавающей запятой может быть проблематичным. Некоторые целые числа даже не могут быть представлены в виде чисел с плавающей запятой.
Pandas может представлять данные целых чисел с возможностью наличия отсутствующих значений, используя arrays.IntegerArray. Это тип расширения, реализованный в pandas. Это не тип данных по умолчанию для целых чисел и не будет определяться автоматически; вы должны явно указать тип данных в array() или Series:
In [1]: arr = pd.array([1, 2, np.nan], dtype=pd.Int64Dtype()) In [2]: arr Out[2]: <IntegerArray> [1, 2, NaN] Length: 3, dtype: Int64
Или строковый псевдоним "Int64" (обратите внимание на заглавную букву "I", чтобы отличить его от типа данных NumPy 'int64'):
In [3]: pd.array([1, 2, np.nan], dtype="Int64") Out[3]: <IntegerArray> [1, 2, NaN] Length: 3, dtype: Int64
Этот массив можно хранить в DataFrame или Series, как любой массив NumPy.
In [4]: pd.Series(arr) Out[4]: 0 1 1 2 2 NaN dtype: Int64
Вы также можете передать список-подобный объект в конструктор Series вместе с типом данных.
In [5]: s = pd.Series([1, 2, np.nan], dtype="Int64") In [6]: s Out[6]: 0 1 1 2 2 NaN dtype: Int64
По умолчанию (если вы не укажете dtype), используется NumPy, и в результате вы получите серию типа float64:
In [7]: pd.Series([1, 2, np.nan]) Out[7]: 0 1.0 1 2.0 2 NaN dtype: float64
Операции с массивом целых чисел будут вести себя аналогично массивам NumPy. Отсутствующие значения будут передаваться, а данные будут приводиться к другому типу данных, если это необходимо.
# arithmetic In [8]: s + 1 Out[8]: 0 2 1 3 2 NaN dtype: Int64 # comparison In [9]: s == 1
© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.24.2/user_guide/integer_na.html