Numpy知识详解之ndarray数据类型详解

Numpy知识详解之ndarray数据类型详解

一、Numpy内部基本数据类型
类型名 类型表示符
布尔型 bool_
有符号整数型 int8(-128~127)/int16/int32/int64
无符号整数型 uint8(0~255)/uint16/uint32/uint64
浮点型 float16/float32/float64
复数型 complex64/complex128
字串型 str_,每个字符用32位Unicode编码表示
二、Numpy自定义数据类型
# 自定义复合数据类型
import numpy as np
arr =[
    ('张三',[88,87],22),
    ('李四',[98,97],23),
    ('王五',[99,99],22)
]

# 第一种设置dtype的方式
# U2 表示2个Unicode字符
# 2int32 表示2个int32的整数
arr1 =np.array(arr,dtype='U2,2int32,int32')
print(arr1) # 输出结果:[('张三', [88, 87], 22) ('李四', [98, 97], 23) ('王五', [99, 99], 22)]
print(arr1[0]['f0']) # 输出结果:张三
print(arr1[1]['f1']) # 输出结果:[98 97]
print(arr1[2]['f2']) # 输出结果:22

# 第二种设置dtype的方式,每一个元组第一个字段表示列的别名,第二个字段表示列的数据类型,第三个字段表示数量
arr2 = np.array(arr,dtype=[
    ('username','str',2),
    ("scores",'int32',2),
    ('age','int32')  # 不写默认为1
])
print(arr2) # 输出结果:[('张三', [88, 87], 22) ('李四', [98, 97], 23) ('王五', [99, 99], 22)]
# arr2[0]["username"]  表示取出arr2数组中第1行中别名为username的数据,以此类推
print(arr2[0]['username'])  # 输出结果:张三
print(arr2[1]['scores'])  # 输出结果:[98 97]
print(arr2[2]['age'])  # 输出结果:22

# 第三种设置dtype的方式
arr3 = np.array(arr,dtype={'names': ['name','scores','age'],
                           'formats': ['U2','2int32','int32']})
print(arr3) # 输出结果:[('张三', [88, 87], 22) ('李四', [98, 97], 23) ('王五', [99, 99], 22)]
print(arr3[0]['name'])  # 输出结果:张三
print(arr3[1]['scores'])  # 输出结果:[98 97]
print(arr3[2]['age'])  # 输出结果:22

# 第四种设置dtype的方式(用的较少)
# ('U2',0) 第一个参数表示的是所需参数类型及数量,第二个参数表示的是字节偏移量,如果偏移量小于上一个数据存放的总的字节数,会出现数据异常
arr4 = np.array(arr,dtype={'names':('U2',0), # 表示参数为两个Unicode字符,从0字节开始
                           'scores':('2int32',9), # 因为两个Unicode字符占8个字节,因此从第9个字节开始存放数据
                           'age':('int32',18)
                           # 'age': ('int32', 16)}) # 偏移量过小  得到结果:[       88 369098839]
}) # 2int32占8个字节,加上之前的需要17个字节,因此从第18个开始
print(arr4) # [('张三', [88, 87], 22) ('李四', [98, 97], 23) ('王五', [99, 99], 22)]
print(arr4[0]['scores'])  # 输出结果:[88 87]
print(arr4[1]['age'])  # 输出结果:23
print(arr4[2]['names']) # 输出结果:王五



# 日期类型
date_arr =np.array(['2021-01-03','2022','2022-02','2022-03-01 12:00:03'])
print(date_arr)  # 输出结果:['2021-01-03' '2022' '2022-02' '2022-03-01 12:00:03']
date_arr=date_arr.astype('M8[D]')
print(date_arr)  # 输出结果:['2021-01-03' '2022-01-01' '2022-02-01' '2022-03-01']
print(date_arr.dtype) # 输出结果:datetime64[D]
print(date_arr[2]-date_arr[1]) # 输出结果:31 days

你可能感兴趣的:(python,python,numpy,数据分析)