对于熊猫,有人知道,除了
(i) float64
,int64
(以及np.number
的其他变体,如float32
,int8
等)
(ii)bool
(iii)datetime64
,timedelta64
例如字符串列,总是有一个dtype
的对象
?
或者,我想知道,在上面的列表中,除了(I)、(ii)和(iii)之外,是否有任何数据类型pandas
不使其成为dtype
对象?
在其他答案的基础上,熊猫还包括了一些自己的数据类型。
Pandas和第三方库在一些地方扩展了NumPy的类型系统。本节介绍pandas在内部进行的扩展。请参阅扩展类型,了解如何编写自己的可用于pandas的扩展。有关已实现扩展的第三方库的列表,请参见扩展数据类型。
下表列出了所有的熊猫扩展类型。请参阅相关文件
https://pandas.pydata.org/pandas-docs/stable/user_guide/basics.html#basics-dtypes
--更新链接--
此外,从pandas 1.0开始,它有自己的字符串数据类型和可为空的数据类型。
熊猫1.0.0发布后编辑2020年2月
Pandas主要为每个Series使用NumPy数组和dtype(数据帧是Series的集合,每个Series可以有自己的dtype)。NumPy的留档进一步解释了dtype、数据类型和数据类型对象。此外,由@lCameron on05提供的答案提供了对Numpy dtype的出色描述。此外,大熊猫在dtype上的文档有很多额外的信息。
熊猫对象中存储的主要类型有float、int、bool、datetime64[ns]、timedelta[ns]和object。此外,这些数据类型具有项目大小,例如int64和int32。
默认情况下,整数类型为int64,浮点类型为Float64,平台REGARDLESS(32位或64位)。以下内容都将产生int64 dtype。
但是,Numpy在创建阵列时将选择依赖于平台的类型。以下内容将在32位平台上生成int32。pandas 1.0.0版的主要变化之一是引入了pd.NA
来表示标量缺失值(而不是先前的np.nan
、pd.NaT
或None
,具体取决于用法)。
Pandas扩展了NumPy的类型系统,还允许用户编写扩展类型。下面列出了所有的熊猫扩展类型。
1) 时区处理
数据类型:tz感知的datetime(注意NumPy不支持时区感知的datetime)。
数据类型:DatetimeTZDtype
标量:时间戳
数组:arrays.DatetimeArray
字符串别名:'datetime64[ns,]'
2)类别数据
数据种类:类别
数据类型:分类数据类型
标量:(无)
数组:分类
字符串别名:“类别”
3) 时间跨度表示法
数据类型:周期(时间跨度)
数据类型:PeriodDtype
标量:周期
数组:数组。周期数组
字符串别名:“句点[]”,“句点[]”
4) 稀疏数据结构
数据种类:稀疏
数据类型: SparseDtype
标量:(无)
数组:arrays.SparseArray
字符串别名:'Sparse','Sparse[int]','Sparse[浮动]'
5) IntervalIndex
数据种类:间隔
数据类型:IntervalDtype
标量:区间
数组:数组。IntervalArray
字符串别名:间隔,间隔,间隔[
6) 可为空的整数数据类型
数据类型:可为空的整数
数据类型: Int64Dtype,...
标量:(无)
数组:arrays.IntegerArray
字符串别名:Int8,Int16,Int32,Int64,UInt8,UInt16,UInt32,UInt64
7) 使用文本数据
数据类型:字符串
数据类型: StringDtype
标量:str
数组:arrays.StringArray
字符串别名:'string'
8) 缺少值的布尔数据
数据类型:布尔值(带NA)
数据类型:BooleanDtype
标量:布尔
数组:arrays.BooleanArray
字符串别名:'boolean'
pandas
从numpy
借用其数据类型。有关这方面的演示,请参见以下内容:
import pandas as pd
df = pd.DataFrame({'A': [1,'C',2.]})
df['A'].dtype
>>> dtype('O')
type(df['A'].dtype)
>>> numpy.dtype
您可以在文档中找到有效的numpy.d类型列表
:
“?”布尔值
'b'(有符号)字节
“B”无符号字节
“i”(有符号)整数
u无符号整数
f浮点数
“c”复数浮点
'时间三角洲
“M”日期时间
“O”(Python)对象
“S”、“a”以零结尾的字节(不推荐)
“U”Unicode字符串
“V”原始数据(无效)
熊猫
应该支持这些类型。使用pandas.Series
对象的astype
方法,将上述任何选项作为输入参数,将导致pandas
尝试将Series
转换为该类型(或至少返回到对象
类型)'u'
是我看到的唯一一个根本不理解的熊猫:
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('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文档包含更多详细信息和图表:
问题内容: 对于大熊猫,有人会知道,除了 (i), (以及like等的其他变体,等等) (ii) (iii), 如字符串列,总有一个的? 另外,我想知道,如果有来自任何数据类型分开(I),(II)和(iii)在上面的列表中不会使这是一个? 问题答案: pandas1.0.0发布后,于2020年2月编辑 熊猫通常为每个Series使用NumPy数组和dtype(数据帧是Series的集合,每个都有自
问题内容: 嗨,我正在尝试打印用户输入的数据类型并产生一个如下表: ABCDEFGH =字符串,1.09 =浮点型,0 =整数,true =布尔 等等。我使用的是python 3.2.3,我知道我可以使用type()来获取数据的类型,但是在python中,所有用户输入都被当作字符串使用,而且我不知道如何确定输入是否为字符串,布尔值,整数或浮点数。这是代码的一部分: 它总是为字符串返回str。感谢任
问题内容: 我有一个名称为的csv文件。我打开并使用以下方法创建了一个熊猫: 其中,是字符串对象的python列表。示例(实际列表的长度为22): 在ipython提示符下,如果我键入并按Enter键,则不会获得带有列和值的数据框,如Pandas网站上的示例所示。相反,我获得有关数据框的信息。我得到: 如果我键入,那么我确实会获得该列的预期值。我有两个问题: (1)在pandas网站上的示例中(例
我对Python是新手。我有以下代码:
我在Pandas中读取了一个SQL查询,虽然值是字符串、日期和整数,但它们是作为dtype“object”输入的。我能够将日期“对象”转换为datetime数据类型,但在尝试转换字符串和整数时出错。 以下是一个例子: 将转换为日期时间有效: 但我在尝试将转换为整数时出错: 注意:我得到一个类似的错误,当我尝试 当试图转换为字符串时,似乎什么也没有发生。
问题内容: 如果我有一个包含以下列的数据框: 我想说:这是一个数据框,请给我列出对象类型或日期时间类型的列的列表吗? 我有一个将数字(Float64)转换为两位小数的函数,并且我想使用此数据框列的特定类型的列表,并通过此函数运行它以将它们全部转换为2dp。 也许: 问题答案: 如果您想要某种类型的列的列表,可以使用: