Что все типы 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
?
Ответы
Ответ 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' timedeltap >
'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
.