Python 熊猫的数据类型(';O';)是什么?

Python 熊猫的数据类型(';O';)是什么?,python,pandas,numpy,dataframe,types,Python,Pandas,Numpy,Dataframe,Types,我在pandas中有一个数据框,我试图找出它的值的类型。我不确定列'Test'的类型。然而,当我运行myFrame['Test'].dtype时,我得到 dtype('O') 这是什么意思?它的意思是: 'O' (Python) objects 第一个字符指定数据类型,其余字符指定每个项目的字节数,Unicode除外,Unicode将其解释为字符数。项目大小必须对应于现有类型,否则将引发错误。支持的种类有 到现有类型,否则将引发错误。支持的种类有: 另一个帮助是如果需要检查type

我在pandas中有一个数据框,我试图找出它的值的类型。我不确定列
'Test'
的类型。然而,当我运行
myFrame['Test'].dtype时,我得到

dtype('O')
这是什么意思?

它的意思是:

'O'     (Python) objects

第一个字符指定数据类型,其余字符指定每个项目的字节数,Unicode除外,Unicode将其解释为字符数。项目大小必须对应于现有类型,否则将引发错误。支持的种类有 到现有类型,否则将引发错误。支持的种类有:

另一个帮助是如果需要检查
type
s.

它表示“python对象”,即不是numpy支持的内置标量类型之一

np.array([object()]).dtype
=> dtype('O')
“O”代表对象

第一行返回:
dtype('O')

带有print语句的行返回以下内容:
object

当您在数据框内看到
dtype('O')
时,这意味着字符串。 什么是
dtype

属于熊猫
或小熊猫的东西,或者两者都属于,或者其他东西?如果我们检查熊猫代码:

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')
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
您可以将最后一个解释为Pandas
dtype('O')
或Pandas对象,即Python类型的字符串,这对应于Numpy
string\u
unicode\u
类型

Pandas dtype    Python type     NumPy type          Usage
object          str             string_, unicode_   Text
就像唐吉诃德在《驴子》中一样,熊猫在《Numpy》中,Numpy理解系统的底层架构,并使用类来实现这一点

数据类型对象是
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
各种不同的
d类型

df.iloc[1,:] = np.nan
df.iloc[2,:] = None
但是如果我们尝试设置
np.nan
None
,这将不会影响原始列的数据类型。输出如下:

   float  int   datetime string    
0    1.0    1 2018-03-10    foo
---
float64 int64 datetime64[ns] object
---
dtype('O')
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

pandas
当列包含混合值(字符串、数字、nan)时,可以自由使用
object
dtype.@quant这意味着pandas字符串就像我试图在我的