pandas借鉴了dtype={'A': np.float}的dtype。有关此示例的说明,请参见以下内容:
import pandas as pd
df = pd.DataFrame({'A': [1,'C',2.]})
df['A'].dtype
>>> dtype('O')
type(df['A'].dtype)
>>> numpy.dtype
您可以在文档中找到有效的dtype={'A': np.float}列表:
'?' 布尔值
'b'(有符号)字节
'B'无符号字节
'i'(有符号)整数
'u'无符号整数
'f'浮点数
“ c”复杂浮点
'm'timedelta
“ M”日期时间
'O'(Python)对象
'S','a'零终止字节(不建议)
'U'Unicode字符串
“ V”原始数据(无效)
2999029108228752752384应该支持这些类型。 使用将以上任何选项作为输入参数的numpy.dtype对象的pandas方法,将导致numpy.dtype('f')尝试将numpy.dtype('float32')转换为该类型(或至少退回到numpy.dtype('f8')类型); 2999029108228752752390是我看到的pandas唯一根本不了解的一个:
df['A'].astype('u')
>>> TypeError: data type "u" not understood
这是导致dtype={'A': np.float}的错误,因为pandas385后必须跟一个数字,该数字指定其中每一项的字节数(必须有效):
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
总而言之,pandas385对象的dtype={'A': np.float}方法将尝试对numpy.dtype有效的任何参数进行明智的操作。请注意,numpy.dtype('f')与2999029108228752752388和2999029108228752752与2999029108228029029等相同,将参数传递给29990291081080292282283923912392391 方法。
要在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_]]
熊猫接受这些类为有效类型。 例如dtype={'A': np.float}。
NumPy文档包含更多详细信息和图表: