[英]what are all the dtypes that pandas recognizes?
對於大熊貓,有沒有人知道,除了
(i) float64
、 int64
(以及np.number
其他變體,如float32
、 int8
等)
(ii) bool
(iii) datetime64
, timedelta64
如字符串列,總有一個dtype
的object
?
或者,我想知道,如果上面的列表中除了 (i)、(ii) 和 (iii) 之外還有任何數據類型, pandas
不會使它的dtype
成為一個object
?
pandas
從numpy
借用了它的 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.nan
、pd.NaT
或None
,具體取決於用法)。
Pandas 擴展了 NumPy 的類型系統,還允許用戶編寫他們的擴展類型。 下面列出了所有的 Pandas 擴展類型。
數據類型:tz-aware datetime(注意 NumPy 不支持時區感知日期時間)。
數據類型: DatetimeTZDtype
標量: 時間戳
字符串別名:'datetime64[ns, ]'
數據類型:分類
數據類型: CategoricalDtype
標量:(無)
數組: 分類
字符串別名:“類別”
數據類型:期間(時間跨度)
數據類型: PeriodDtype
標量: 句點
字符串別名: 'period[]', 'Period[]'
數據類型:稀疏
數據類型: SparseDtype
標量:(無)
字符串別名:'Sparse'、'Sparse[int]'、'Sparse[float]'
數據類型:區間
數據類型: IntervalDtype
標量: 區間
字符串別名:'interval'、'Interval'、'Interval[<numpy_dtype>]'、'Interval[datetime64[ns, ]]'、'Interval[timedelta64[]]'
數據類型:可為空的整數
數據類型: Int64Dtype , ...
標量:(無)
字符串別名:'Int8'、'Int16'、'Int32'、'Int64'、'UInt8'、'UInt16'、'UInt32'、'UInt64'
數據類型:字符串
數據類型: StringDtype
標量: str
字符串別名:'字符串'
數據類型:布爾型(帶NA)
數據類型: BooleanDtype
標量:布爾
字符串別名:'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.