Массивы в Pandas (pd.array)

pd.array — это конструктор «расширенного» массива (ExtensionArray) Pandas. В отличие от обычного NumPy-массива, он поддерживает специальные dtype: Int64 (с пропусками), boolean, string, datetime64[ns, tz]. Используется в Series как «движок» хранения значений.

Когда использовать

  • Целые числа с пропусками — без pd.array они превратятся в float.

  • Строковый столбец — явный "string" dtype работает лучше, чем object.

  • Нужны nullable bool без приведения к object.

Пример 1. Int64 с NaN

import pandas as pd

a = pd.array([1, 2, None, 4], dtype="Int64")
print(a)

Output:

<IntegerArray>
[1, 2, <NA>, 4]
Length: 4, dtype: Int64

С обычным NumPy int это бы потребовало float и NaN.

Пример 2. Сравнение с NumPy

import pandas as pd
import numpy as np

print(pd.Series([1, None, 3]).dtype)               # float64 (legacy)
print(pd.Series([1, None, 3], dtype="Int64").dtype) # Int64 (extension)

Output:

float64
Int64

Пример 3. string dtype

import pandas as pd

a = pd.array(["bot1", "bot2", None], dtype="string")
print(a)
print(a.dtype)

Output:

<StringArray>
['bot1', 'bot2', <NA>]
Length: 3, dtype: string
string

Пример 4. boolean dtype

import pandas as pd

a = pd.array([True, False, None], dtype="boolean")
print(a)

Output:

<BooleanArray>
[True, False, <NA>]
Length: 3, dtype: boolean

Пример 5. Доступ к массиву Series

import pandas as pd

s = pd.Series([1, 2, 3], dtype="Int64")
print(s.array)
print(type(s.array))

Output:

<IntegerArray>
[1, 2, 3]
Length: 3, dtype: Int64
<class 'pandas.core.arrays.integer.IntegerArray'>

Пример 6. to_numpy

import pandas as pd

s = pd.Series([1, 2, 3], dtype="Int64")
arr = s.to_numpy()
print(arr, arr.dtype)

Output:

[1 2 3] object

Если в данных есть NA, to_numpy вернёт object или поможет na_value=np.nan.

Пример 7. datetime64 с timezone

import pandas as pd

a = pd.array(
    ["2026-01-15 10:00", "2026-01-15 11:00"],
    dtype="datetime64[ns, Asia/Almaty]",
)
print(a)

Output:

<DatetimeArray>
['2026-01-15 10:00:00+05:00', '2026-01-15 11:00:00+05:00']
Length: 2, dtype: datetime64[ns, Asia/Almaty]

Подводные камни

  • Int64 (с большой буквы) — это nullable extension dtype Pandas. int64 (с маленькой) — это NumPy и не поддерживает NA.

  • Не все библиотеки умеют работать с ExtensionArray — иногда приходится приводить к NumPy.

  • pd.array сам угадывает dtype, но лучше указывать его явно.

См. также

Примечание

Лицензия и источники

Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.