对于pandas,如果有任何数据类型除了
,任何人都会知道(i)float64
,int64
(np.number
的其他变体,如float32
,int8
等。
(ii)bool
(iii)datetime64
,timedelta64
例如字符串列,总是dtype
object
?
或者,我想知道,如果上面列表中除了(i),(ii)和(iii)之外还有任何数据类型pandas
没有使dtype
成为object
1}}?
答案 0 :(得分:25)
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
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更多细节和图表:
答案 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