簡體   English   中英

pandas 識別的所有 dtypes 是什么?

[英]what are all the dtypes that pandas recognizes?

對於大熊貓,有沒有人知道,除了

(i) float64int64 (以及np.number其他變體,如float32int8等)

(ii) bool

(iii) datetime64 , timedelta64

如字符串列,總有一個dtypeobject

或者,我想知道,如果上面的列表中除了 (i)、(ii) 和 (iii) 之外還有任何數據類型, pandas不會使它的dtype成為一個object

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列表:

'? 布爾值

'b'(有符號)字節

'B' 無符號字節

'i'(有符號)整數

'u' 無符號整數

'f' 浮點數

'c' 復數浮點數

'm' 時間增量

'M' 日期時間

'O' (Python) 對象

'S', 'a' 以零結尾的字節(不推薦)

'U' Unicode 字符串

'V' 原始數據(無效)

pandas應該支持這些類型。 使用帶有上述任何選項的pandas.Series對象的astype方法作為輸入參數將導致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

總而言之, pandas對象的astype方法將嘗試對任何對numpy.dtype有效的參數做一些明智的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)

輸出:

[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 文檔包含更多詳細信息和圖表:

數據類型

2020 年 2 月大熊貓 1.0.0 發布后編輯

Pandas 主要為每個系列使用 NumPy 數組和數據類型(數據幀是系列的集合,每個系列都可以有自己的數據類型)。 NumPy 的文檔進一步解釋了dtype數據類型數據類型對象 此外,@lcameron05 提供的答案提供了對 numpy dtypes 的出色描述。 此外,關於dtypes的 pandas 文檔有很多附加信息。

pandas 對象中存儲的主要類型是 float、int、bool、datetime64[ns]、timedelta[ns] 和 object。 此外,這些 dtype 具有項目大小,例如 int64 和 int32。

默認整數類型是 int64 和浮點類型是 float64,不管平台(32 位或 64 位)。 以下都將導致 int64 dtypes。

然而,Numpy 在創建數組時會選擇平台相關的類型。 以下將導致 32 位平台上的 int32。 pandas 1.0.0 版本的主要變化之一是引入了pd.NA來表示標量缺失值(而不是之前的np.nanpd.NaTNone ,具體取決於用法)。

Pandas 擴展了 NumPy 的類型系統,還允許用戶編寫他們的擴展類型 下面列出了所有的 Pandas 擴展類型。

1) 時區處理

數據類型:tz-aware datetime(注意 NumPy 不支持時區感知日期時間)。

數據類型: DatetimeTZDtype

標量: 時間戳

數組: arrays.DatetimeArray

字符串別名:'datetime64[ns, ]'

2) 分類數據

數據類型:分類

數據類型: CategoricalDtype

標量:(無)

數組: 分類

字符串別名:“類別”

3) 時間跨度表示

數據類型:期間(時間跨度)

數據類型: PeriodDtype

標量: 句點

數組: arrays.PeriodArray

字符串別名: 'period[]', 'Period[]'

4) 稀疏數據結構

數據類型:稀疏

數據類型: SparseDtype

標量:(無)

數組: arrays.SparseArray

字符串別名:'Sparse'、'Sparse[int]'、'Sparse[float]'

5) 間隔指數

數據類型:區間

數據類型: IntervalDtype

標量: 區間

數組: arrays.IntervalArray

字符串別名:'interval'、'Interval'、'Interval[<numpy_dtype>]'、'Interval[datetime64[ns, ]]'、'Interval[timedelta64[]]'

6) 可為空的整數數據類型

數據類型:可為空的整數

數據類型: Int64Dtype , ...

標量:(無)

數組: arrays.IntegerArray

字符串別名:'Int8'、'Int16'、'Int32'、'Int64'、'UInt8'、'UInt16'、'UInt32'、'UInt64'

7) 處理文本數據

數據類型:字符串

數據類型: StringDtype

標量: str

數組: arrays.StringArray

字符串別名:'字符串'

8) 帶有缺失值的布爾數據

數據類型:布爾型(帶NA)

數據類型: BooleanDtype

標量:布爾

數組: arrays.BooleanArray

字符串別名:'boolean'

在其他答案的基礎上,pandas 還包括許多自己的 dtype。

Pandas 和第三方庫在一些地方擴展了 NumPy 的類型系統。 本節介紹 pandas 內部所做的擴展。 請參閱擴展類型以了解如何編寫自己的可與 Pandas 一起使用的擴展。 有關已實現擴展的第三方庫列表,請參閱擴展數據類型。

下表列出了所有 Pandas 擴展類型。 請參閱相應的文件

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

--更新鏈接--

此外,從 pandas 1.0 開始,它有自己的字符串數據類型和可為空數據類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM