Что такое dtype ('O') в пандах?

108

У меня есть фрейм данных в пандах, и я пытаюсь выяснить, каковы типы его значений. Я не уверен, что это за столбец 'Test'. Однако когда я бегу myFrame['Test'].dtype, я получаю;

dtype('O')

Что это значит?

квант
источник
9
pandasсвободно использует objectdtype, когда столбцы содержат смешанные значения (строки, числа, nan).
hpaulj 01
@quant это означает строку pandas, как я пытался указать в своем ответе
prosti

Ответы:

109

Это значит:

'O'     (Python) objects

Источник .

Первый символ указывает тип данных, а остальные символы определяют количество байтов на элемент, за исключением Unicode, где он интерпретируется как количество символов. Размер элемента должен соответствовать существующему типу, в противном случае возникнет ошибка. Поддерживаемые типы относятся к существующему типу, в противном случае возникнет ошибка. Поддерживаемые типы:

'b'       boolean
'i'       (signed) integer
'u'       unsigned integer
'f'       floating-point
'c'       complex-floating point
'O'       (Python) objects
'S', 'a'  (byte-)string
'U'       Unicode
'V'       raw data (void)

Другой ответ поможет, если нужно проверить types.

Jezrael
источник
19

Когда вы видите dtype('O')внутри фрейма данных, это означает строку Pandas.

Что есть dtype?

Что-то, что принадлежит pandasили numpy, или обоим, или чему-то еще? Если мы рассмотрим код pandas:

df = pd.DataFrame({'float': [1.0],
                    'int': [1],
                    'datetime': [pd.Timestamp('20180310')],
                    'string': ['foo']})
print(df)
print(df['float'].dtype,df['int'].dtype,df['datetime'].dtype,df['string'].dtype)
df['string'].dtype

Это будет выглядеть так:

   float  int   datetime string    
0    1.0    1 2018-03-10    foo
---
float64 int64 datetime64[ns] object
---
dtype('O')

Вы можете интерпретировать последний как dtype('O')объект Pandas или Pandas, который является строкой типа Python, и это соответствует Numpy string_или unicode_типам.

Pandas dtype    Python type     NumPy type          Usage
object          str             string_, unicode_   Text

Как Дон Кихот на заднице, Pandas на Numpy, а Numpy понимает базовую архитектуру вашей системы и использует numpy.dtypeдля этого класс .

Объект типа данных - это экземпляр numpy.dtypeкласса, который более точно понимает тип данных, включая:

  • Тип данных (целое число, число с плавающей запятой, объект Python и т. Д.)
  • Размер данных (сколько байтов, например, целое число)
  • Порядок байтов данных (прямой или прямой порядок байтов)
  • Если тип данных структурированный, совокупность других типов данных (например, описание элемента массива, состоящего из целого числа и числа с плавающей запятой)
  • Как называются «поля» структуры
  • Каков тип данных каждого поля
  • Какую часть блока памяти занимает каждое поле
  • Если тип данных является подмассивом, каковы его форма и тип данных

В контексте этого вопроса dtypeотносится как к pands, так и к numpy, и, в частности, dtype('O')означает, что мы ожидаем строку.


Вот код для тестирования с объяснением: Если у нас есть набор данных в виде словаря

import pandas as pd
import numpy as np
from pandas import Timestamp

data={'id': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, 'date': {0: Timestamp('2018-12-12 00:00:00'), 1: Timestamp('2018-12-12 00:00:00'), 2: Timestamp('2018-12-12 00:00:00'), 3: Timestamp('2018-12-12 00:00:00'), 4: Timestamp('2018-12-12 00:00:00')}, 'role': {0: 'Support', 1: 'Marketing', 2: 'Business Development', 3: 'Sales', 4: 'Engineering'}, 'num': {0: 123, 1: 234, 2: 345, 3: 456, 4: 567}, 'fnum': {0: 3.14, 1: 2.14, 2: -0.14, 3: 41.3, 4: 3.14}}
df = pd.DataFrame.from_dict(data) #now we have a dataframe

print(df)
print(df.dtypes)

Последние строки исследуют фрейм данных и отмечают вывод:

   id       date                  role  num   fnum
0   1 2018-12-12               Support  123   3.14
1   2 2018-12-12             Marketing  234   2.14
2   3 2018-12-12  Business Development  345  -0.14
3   4 2018-12-12                 Sales  456  41.30
4   5 2018-12-12           Engineering  567   3.14
id               int64
date    datetime64[ns]
role            object
num              int64
fnum           float64
dtype: object

Все разные dtypes

df.iloc[1,:] = np.nan
df.iloc[2,:] = None

Но если мы попытаемся установить np.nanили Noneэто не повлияет на исходный столбец dtype. Результат будет таким:

print(df)
print(df.dtypes)

    id       date         role    num   fnum
0  1.0 2018-12-12      Support  123.0   3.14
1  NaN        NaT          NaN    NaN    NaN
2  NaN        NaT         None    NaN    NaN
3  4.0 2018-12-12        Sales  456.0  41.30
4  5.0 2018-12-12  Engineering  567.0   3.14
id             float64
date    datetime64[ns]
role            object
num            float64
fnum           float64
dtype: object

Таким образом np.nanили Noneне будет изменять столбцы dtype, если мы не установим для всех строк столбца значение np.nanили None. В этом случае столбец станет float64или objectсоответственно.

Вы также можете попробовать установить отдельные строки:

df.iloc[3,:] = 0 # will convert datetime to object only
df.iloc[4,:] = '' # will convert all columns to object

И здесь следует отметить, что если мы установим строку внутри столбца, отличного от строки, она станет строкой или объектом dtype.

Прости
источник
14

Это означает «объект Python», то есть не один из встроенных скалярных типов, поддерживаемых numpy.

np.array([object()]).dtype
=> dtype('O')
shx2
источник
6

«О» означает объект .

#Loading a csv file as a dataframe
import pandas as pd 
train_df = pd.read_csv('train.csv')
col_name = 'Name of Employee'

#Checking the datatype of column name
train_df[col_name].dtype

#Instead try printing the same thing
print train_df[col_name].dtype

Первая строка возвращает: dtype('O')

Строка с оператором печати возвращает следующее: object

Джеру Лука
источник