У мене є фрейм даних у пандах, і я намагаюся розібратися, що таке типи його значень. Я не впевнений, який тип стовпця 'Test'
. Однак, коли бігаю myFrame['Test'].dtype
, я отримую;
dtype('O')
Що це означає?
У мене є фрейм даних у пандах, і я намагаюся розібратися, що таке типи його значень. Я не впевнений, який тип стовпця 'Test'
. Однак, коли бігаю myFrame['Test'].dtype
, я отримую;
dtype('O')
Що це означає?
Відповіді:
Це означає:
'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)
Інша відповідь допомагає, якщо потрібно перевірити type
s.
dtype('O')
всередині фрейму даних, це означає рядок Pandas.Що таке dtype
?
Щось, що належить pandas
або numpy
, або обом, чи ще чомусь? Якщо ми вивчимо код панди:
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
класу, який більш точно розуміє тип даних, включаючи:
У контексті цього питання dtype
належить і до груп, і до нумеру, і, зокрема, 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
.
'О' означає об'єкт .
#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
pandas
вільно використовуєobject
dtype, коли стовпці містять змішані значення (рядки, числа, nan).