Python数据分析NumPy和pandas(三、NumPy学习记录2)

ndarray 的数据类型

数据类型(dtype)是一个特殊对象,其中包含ndarray将内存块解释为特定类型的数据所需要的信息(元数据、有关数据的数据)。

数据类型是的NumPy可以跟其他系统的数据进行灵活的交互。在很多情况下,可以直接映射到磁盘或内存,可以在磁盘上读写二进制数据流以及连接到以C等低级语言编写的代码。NumPy数字数据类型的命名方式跟其他语言大同小异,NumPy支持的数据类型的完整列表见下表。

类型类型代码类型描述
int8, uint8i1, u1有符号和无符号的8位(1字节)整数类型
int16, uint16i2, u2有符号和无符号的16位整数类型
int32, uint32i4, u4有符号和无符号的32位整数类型
int64, uint64i8, u8有符号和无符号的64位整数类型
float16f2半精度浮点数,在内存中占2个字节
float32f4或f标准单精度浮点数,与C的float兼容
float64f8或d标准双精度浮点数,兼容C的double和Python的float 对象
float128f16或g扩展精度浮点数
complex64, complex128, complex256c8, c16, c32分别由两个32位、64位及128位浮点数表示的复数
bool?存储True和False值的布尔类型
objectoPython对象类型,值可以是任何 Python对象
string_S固定长度的ASCII字符串类型(每个字符 1 个字节)。例如,要创建长度为 10 的字符串数据类型,使用 'S10'
unicode_U固定长度的 Unicode 类型(每个字符的长度跟随所在系统或平台),有与 string_ 同的规范语义(例如,创建长度为10的字符串,使用'U10' )

提醒:有符号和无符号整数类型的区别。有符号整数可以表示正整数和负整数,而无符号整数只能表示非零整数。例如,int8(有符号 8 位整数)可以表示从 -128 到 127(含)的整数,而 uint8(无符号 8 位整数)可以表示 0 到 255。

数据类型的使用

1.创建数组时指定数据类型

arr1 = np.array([1, 2, 3], dtype=np.float64)

arr2 = np.array([1, 2, 3], dtype=np.int32)

print打印输出arr1数组如下:

[1. 2. 3.]  从输出结果就能看出是浮点型。也可以用arr1.dtype验证输出float64。

print打印输出arr2数组如下:

[1 2 3] 从输出结果能看出是整数类型。也可以用arr2.dtype验证输出int32。

2.创建数组时不指定数据类型

arr = np.array([1, 2, 3, 4, 5, 6])

print(arr.dtype) 输出 int64。这是因为创建数组的列表[1, 2, 3, 4, 5, 6]都是整数类型的数字,不指定类型的情况下推断生成的数组为整数类型。

在生成数组后可以用astype函数指定(转化)数据类型,如下代码:

import numpy as np

float_arr = arr.astype(np.float64)

print(float_arr)

print(float_arr.dtype)

输出:[1., 2., 3., 4., 5., 6.]

float64

通过astype函数将数据类型转化成了float64类型的数组。

下面看看我们将浮点数类型的数组转化成整数类型的数组看看会发生什么?

arr = np.array([1.7, -1.2, -3.6, 4.5, 5.9, 0.1])

print(arr)

print(arr.astype(np.int32))

输出结果如下:

[ 1.7 -1.2 -3.6  4.5  5.9  0.1]
[ 1 -1 -3  4  5  0]

从输出结果看到,float转化成int,小数部分被截掉了。

我们也可以使用astype将数字表示的字符串转化为数字类型,如下:

numeric_strings = np.array(["1.55", "-8.6", "32", "10.2"], dtype=np.string_) #bytes_

numeric_strings.astype(float)

输出:[ 1.55, -8.6 , 42.   , 10.2 ]

使用 numpy.string_ 类型时要小心,因为 NumPy 中的字符串数据是固定大小的,可能会在没有警告的情况下截断输入。pandas 对非数字数据具有更直观的开箱即用行为。

以上两行代码有两个地方需要注意的。(1)我们在创建数组时指定了数据类型为string_,但是numpy2.0之后string_被移除了需要使用bytes_代替(2)上面我们在astype函数中直接使用了python自带的float类型,NumPy会将Python类型别名为其自己的等效数据类型,这里相当于float64。

注意:调用astype总是会创建一个新数组(数据的副本),即使新数据类型与旧数据类型相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值