Серия object
dtype состоит из указателей на произвольные объекты Python. Подумайте о object
dtype так же, как вы могли бы составить список Python. Например, список Python ['foo', 1]
не хранит значения в непрерывном блоке памяти.
Таким же образом вы не можете прикрепить определенный тип данных к list
, даже если все элементы одного типа, серия Pandas object
содержит указатели на любое количество типов .
Как правило, тип dand для Pandas изменяется на , вмещая значения. Таким образом, добавление значения с плавающей точкой к целому ряду превратит весь ряд в float
. Добавление строки к числовому ряду приведет к значению object
. Вы можете даже заставить числовой ряд иметь object
dtype, хотя это не рекомендуется:
s = pd.Series(list(range(100000)), dtype=object)
Основное преимущество Pandas, то есть векторизованные вычисления, теряется, как только вы начинаете использовать серию object
. Их следует избегать , где это возможно. Например, вы можете использовать pd.Categorical
для факторизации категорий, если это применимо.
Вот тривиальный пример, демонстрирующий падение производительности:
t = pd.Series(list(range(100000)))
%timeit s*10 # 7.31 ms
%timeit t*10 # 366 µs
Related: Строки в DataFrame, но dtype - это объект