У мене є фрейм даних у пандах, і я намагаюся розібратися, що таке типи його значень. Я не впевнений, який тип стовпця '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)
Інша відповідь допомагає, якщо потрібно перевірити types.
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вільно використовуєobjectdtype, коли стовпці містять змішані значення (рядки, числа, nan).