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

时间:2015-03-25 01:14:35

标签: python python-3.x pandas

对于pandas,如果有任何数据类型除了

,任何人都会知道

(i)float64int64np.number的其他变体,如float32int8等。

(ii)bool

(iii)datetime64timedelta64

例如字符串列,总是dtype object

或者,我想知道,如果上面列表中除了(i),(ii)和(iii)之外还有任何数据类型pandas没有使dtype成为object 1}}?

3 个答案:

答案 0 :(得分:25)

pandasnumpy借用其dtypes。有关此示例,请参阅以下内容:

import pandas as pd

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

>>> dtype('O')

type(df['A'].dtype)

>>> numpy.dtype

您可以找到有效numpy.dtypes in the documentation的列表:

  

'?'布尔

     

'b'(签名)字节

     

'B'无符号字节

     

'我'(签名)整数

     

'u'无符号整数

     

'f'浮点

     

'c'复杂浮点

     

'm'timedelta

     

'M'日期时间

     

'O'(Python)对象

     

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

     

'U'Unicode字符串

     

'V'原始数据(无效)

pandas应支持这些类型。使用上述任意选项作为输入参数的astype对象的pandas.Series方法将导致pandas尝试将Series转换为该类型(或至少回到object类型); 'u'是唯一一个pandas根本不理解的人:

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

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

这是一个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

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

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

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

subdtypes(np.generic)

输出:

[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_]]

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

NumPy docs contain更多细节和图表:

dtypes

答案 1 :(得分:12)

还有uint8。

dtypes上的Pandas文档提供了更多信息。

  

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

     

默认情况下,整数类型为int64,float类型为float64,   无论平台(32位还是64位)。以下将全部   导致int64 dtypes。

     然而,

Numpy会在创建时选择与平台相关的类型   阵列。以下将导致32位平台上的int32。

答案 2 :(得分:2)

在其他答案的基础上,熊猫还包含许多自己的dtypes。

  

熊猫和第三方库在一些方面扩展了NumPy的类型系统   的地方。本节介绍熊猫做了的扩展   内部。请参阅扩展类型以了解如何编写自己的扩展   适用于大熊猫。有关扩展名的列表,请参见扩展数据类型。   实现了扩展的第三方库。

     

下表列出了所有熊猫扩展名类型。见   相应文件

https://pandas.pydata.org/pandas-docs/stable/getting_started/basics.html#dtypes

enter image description here