大熊猫认识到的所有dtypes是什么?

uda*_*day 46 python python-3.x pandas

对于熊猫,任何人都知道,如果有任何数据类型

(ⅰ) ,float64(int64 和的其它变体np.numberfloat32,int8等)

(ⅱ) bool

(iii)datetime64,timedelta64

如字符串列,总有一个dtypeobject

或者,我想知道,如果除上述列表中的(i),(ii)和(iii)之外还有任何数据类型,那么pandas它不是dtype一个object

小智 32

pandas借用它的dtypes numpy.有关此演示,请参阅以下内容:

import pandas as pd

df = pd.DataFrame({'A': [1,'C',2.]})
df['A'].dtype

>>> dtype('O')

type(df['A'].dtype)

>>> numpy.dtype
Run Code Online (Sandbox Code Playgroud)

您可以numpy.dtypes 在文档中找到有效列表:

'?' 布尔

'b'(带符号)字节

'B'无符号字节

'i'(签名)整数

'u'无符号整数

'f'浮点

'c'复杂浮点

'm'timedelta

'M'日期时间

'O'(Python)对象

'S','a'以零结尾的字节(不推荐)

'U'Unicode字符串

'V'原始数据(无效)

pandas应该支持这些类型.使用具有上述任何选项astypepandas.Series对象的方法作为输入参数将导致pandas尝试将其转换Series为该类型(或者至少回退到object类型); 'u'是唯一一个我看pandas不懂的人:

df['A'].astype('u')

>>> TypeError: data type "u" not understood
Run Code Online (Sandbox Code Playgroud)

这是一个numpy错误,因为'u'需要后跟一个数字,指定每个项目的字节数(需要有效):

import numpy as np

np.dtype('u')

>>> TypeError: data type "u" not understood

np.dtype('u1')

>>> dtype('uint8')

np.dtype('u2')

>>> dtype('uint16')

np.dtype('u4')

>>> dtype('uint32')

np.dtype('u8')

>>> dtype('uint64')

# testing another invalid argument
np.dtype('u3')

>>> TypeError: data type "u3" not understood
Run Code Online (Sandbox Code Playgroud)

总而言之,对象的astype方法pandas将尝试用任何有效的参数做一些合理的事情numpy.dtype.请注意,将参数传递给方法numpy.dtype('f')也是相同的numpy.dtype('float32'),numpy.dtype('f8')也是相同的.numpy.dtype('float64')pandas astype

要在NumPy中找到相应的数据类型类,Pandas文档建议:

def subdtypes(dtype):
    subs = dtype.__subclasses__()
    if not subs:
        return dtype
    return [dtype, [subdtypes(dt) for dt in subs]]

subdtypes(np.generic)
Run Code Online (Sandbox Code Playgroud)

输出:

[numpy.generic,
 [[numpy.number,
   [[numpy.integer,
     [[numpy.signedinteger,
       [numpy.int8,
        numpy.int16,
        numpy.int32,
        numpy.int64,
        numpy.int64,
        numpy.timedelta64]],
      [numpy.unsignedinteger,
       [numpy.uint8,
        numpy.uint16,
        numpy.uint32,
        numpy.uint64,
        numpy.uint64]]]],
    [numpy.inexact,
     [[numpy.floating,
       [numpy.float16, numpy.float32, numpy.float64, numpy.float128]],
      [numpy.complexfloating,
       [numpy.complex64, numpy.complex128, numpy.complex256]]]]]],
  [numpy.flexible,
   [[numpy.character, [numpy.bytes_, numpy.str_]],
    [numpy.void, [numpy.record]]]],
  numpy.bool_,
  numpy.datetime64,
  numpy.object_]]
Run Code Online (Sandbox Code Playgroud)

Pandas接受这些类作为有效类型.例如,dtype={'A': np.float}.

NumPy文档包含更多详细信息和图表:

dtypes


Ale*_*der 15

还有uint8.

关于dtypes的Pandas文档有更多的信息.

存储在pandas对象中的主要类型是float,int,bool,datetime64 [ns],timedelta [ns]和object.此外,这些dtypes具有项目大小,例如int64和int32.

默认情况下,整数类型为int64,float类型为float64,平台的REGARDLESS(32位或64位).以下都将导致int64 dtypes.

但是,Numpy在创建数组时会选择与平台相关的类型.以下将导致32位平台上的int32.