Подтвердить что ты не робот

Что все типы dtypes, которые pandas распознает?

Для pandas, кто-нибудь знает, если какой-либо тип данных, кроме

(i) float64, int64 (и другие варианты np.number как float32, int8 и т.д.)

(ii) bool

(iii) datetime64, timedelta64

такие как строковые столбцы, всегда есть dtype of object?

В качестве альтернативы, я хочу знать, если какой-либо тип данных отличается от (i), (ii) и (iii) в списке выше, что pandas не делает его dtype a object?

4b9b3361

Ответ 1

Там также uint8.

Документы Pandas dtypes содержат гораздо больше информации.

Основными типами, хранящимися в объектах Pandas, являются float, int, bool, datetime64 [ns], timedelta [ns] и объект. Кроме того, эти типы имеют размеры элементов, например. int64 и int32.

По умолчанию целыми типами являются int64, а типы float - float64, БЕСПОРЯДОЧЕННОСТЬ платформы (32-разрядная или 64-разрядная). Следующие приводят к типам int64.

Numpy, однако, будет выбирать типы, зависящие от платформы, при создании массивы. Следующие WILL приводят к int32 на 32-битной платформе.

Ответ 2

pandas заимствует его типы из numpy. Для демонстрации этого можно увидеть следующее:

import pandas as pd

df = pd.DataFrame({'A': [1,'C',2.]})
df['A'].dtype

>>> dtype('O')

type(df['A'].dtype)

>>> numpy.dtype

Вы можете найти список допустимых numpy.dtypes в документации:

'?' булево

'b' (подписанный) байт

'B' беззнаковый байт

'i' (signed) integer

'u' беззнаковое целое

'f' с плавающей запятой

'c' комплексно-плавающая точка

'm' timedelta​​p >

'M' datetime

Объекты

'O' (Python)

'S', 'a' байты с нулевым завершением (не рекомендуется)

'U' Unicode string

'V' исходные данные (void)

pandas должен поддерживать эти типы. Используя метод astype объекта pandas.Series с любым из указанных выше параметров, поскольку входной аргумент приведет к тому, что pandas попытается преобразовать Series в этот тип (или, по крайней мере, вернуться к object тип); 'u' - единственное, что я вижу pandas не понимая вообще:

df['A'].astype('u')

>>> TypeError: data type "u" not understood

Это ошибка numpy, которая возникает из-за того, что за 'u' должно следовать число, определяющее количество байтов на элемент в (что должно быть достоверным):

import numpy as np

np.dtype('u')

>>> TypeError: data type "u" not understood

np.dtype('u1')

>>> dtype('uint8')

np.dtype('u2')

>>> dtype('uint16')

np.dtype('u4')

>>> dtype('uint32')

np.dtype('u8')

>>> dtype('uint64')

# testing another invalid argument
np.dtype('u3')

>>> TypeError: data type "u3" not understood

Подводя итоги, методы astype объектов pandas будут пытаться и делать что-то разумное с любым аргументом, который действителен для numpy.dtype. Обратите внимание, что numpy.dtype('f') совпадает с numpy.dtype('float32'), а numpy.dtype('f8') совпадает с numpy.dtype('float64') и т.д. То же самое касается передачи аргументов методам pandas astype.