问题:熊猫中的dtype(’O’)是什么?
我在pandas中有一个数据框,我试图找出其值的类型。我不确定column的类型'Test'。但是,当我跑步时myFrame['Test'].dtype,我得到了;
dtype('O')这是什么意思?
回答 0
它的意思是:
'O'     (Python) objects来源。
第一个字符指定数据的类型,其余字符指定每个项目的字节数,Unicode除外,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。
回答 1
当您dtype('O')在数据框内看到这意味着熊猫字符串。
什么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')您可以将最后一个解释为Pandas dtype('O')或Pandas对象,它是Python类型的字符串,它对应于Numpy string_或unicode_type。
Pandas dtype    Python type     NumPy type          Usage
object          str             string_, unicode_   Text就像唐吉x德(Don Quixote)在屁股上一样,熊猫(Pandas)在Numpy上一样,Numpy理解系统的基础架构,并numpy.dtype为此使用类。
数据类型对象是numpy.dtype类的实例,可以更精确地理解数据类型,包括:
- 数据类型(整数,浮点数,Python对象等)
- 数据大小(例如整数中有多少个字节)
- 数据的字节顺序(小端或大端)
- 如果数据类型是结构化的,则为其他数据类型的集合(例如,描述由整数和浮点数组成的数组项)
- 该结构的“字段”的名称是什么
- 每个字段的数据类型是什么
- 每个字段占用存储块的哪一部分
- 如果数据类型是子数组,则其形状和数据类型是什么
在这个问题的上下文中dtype,它既属于pand又属于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这里需要注意的是,如果我们在非字符串列中设置字符串,它将变成string或object dtype。
回答 2
它的意思是“一个python对象”,即不是numpy支持的内置标量类型之一。
np.array([object()]).dtype
=> dtype('O')回答 3
“ O”代表对象。
#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')
带有print语句的行返回以下内容: object

