本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Data_Analysis/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接:https://pan.baidu.com/s/1MYkeYeVAIRqbxezQECHwcA?pwd=mnsj
提取码:mnsj
-
前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Data_Analysis
——————————————————
1.ndarray对象的数据类型:
1>>> arr = np.array([[0,1,2,3,4],[9,8,7,6,5]])
2>>> arr
3array([[0, 1, 2, 3, 4],
4 [9, 8, 7, 6, 5]])
5
6# 查看元素数据类型
7>>> arr.dtype
8dtype('int32')
从上面实例中看到arr.dtype返回的类型是int32,这个类型在基础的python语法中并不存在,它是numpy定义的元素类型,除此之外,numpy还有很多其他元素类型:
数据类型 |
说明 |
bool | 布尔类型,True或False |
intc | 与C语言中的int类型一致,一般是int32或int64 |
intp | 用于索引的整数,与C语言中ssize_t一致,int32或int64 |
int8 | 字节长度的整数,取值:[-128,127] |
int16 | 16位长度的整数,取值:[-32768,32767] |
int32 | 32位长度的整数,取值:[-2^31,2^31-1] |
int64 | 64位长度的整数,取值:[-2^63,2^63-1] |
还有一类元素类型,没有负数部分,称为无符号整数:
数据类型 |
说明 |
uint8 | 8位无符号整数,取值:[0,255] |
uint16 | 16位无符号整数,取值:[0,65535] |
uint32 | 32位无符号整数,取值:[0,2^32-1] |
uint64 | 64位无符号整数,取值:[0,2^64-1] |
float16 | 16位半精度浮点数:1位符号位,5位指数,10位尾数 |
float32 | 32位半精度浮点数:1位符号位,8位指数,23位尾数 |
float64 | 64位半精度浮点数:1位符号位,11位指数,52位尾数 |
float128 | 扩展精度的浮点数 |
ndarray还支持两种复数类型:
数据类型 | 说明 |
complex64 | 复数类型,实部和虚部都是32位浮点数 |
complex128 | 复数类型,实部和虚部都是64位浮点数 |
相比python语法仅支持整数、浮点数和复数3种类型,那ndarray为什么要支持这么多的元素类型那?
-
科学计算涉及数据较多,对存储和性能都有较高要求; -
对元素类型精细定义,有助于Numpy合理使用存储空间并优化性能; -
对元素类型精细定义,有助于程序员对程序规模有合理评估。
可以使用ndarray的astype方法将一个数组从一种数据类型显式地转换为另一种。
TIPS:调用astype总是创建一个新的数组(数据的拷贝),即使新的数据类型与旧的数据类型相同。
1>>> arr = np.array([[0,1,2,3,4],[9,8,7,6,5]])
2>>> arr.dtype
3dtype('int32')
4
5>>> float_arr = arr.astype(np.float64)
6>>> float_arr.dtype
7dtype('float64')
需要注意是,如果将浮点数转换为整数的话,那么原有数据小数点后的部分将会被消除。
1>>> arr = np.array([1.23 , -2.34 , 3.45 , -4.56 , 5.67])
2>>> arr
3array([ 1.23, -2.34, 3.45, -4.56, 5.67])
4
5>>> int_arr = arr.astype(np.int64)
6>>> int_arr
7array([ 1, -2, 3, -4, 5], dtype=int64)
也可以使用astype将一个代表数字的字符串数组转换为数字形式。
TIPS:在使用numpy.string_类型时要谨慎,因为NumPy中的字符串数据是固定大小的,可能会在没有警告的情况下截断输入。pandas对非数字数据有更直观的开箱即用操作。
1>>> num_str_arr = np.array(['1.23' , '-2.34' , '3.45' , '-4.56' , '5.67'] , dtype=np.string_)
2>>> num_str_arr
3array([b'1.23', b'-2.34', b'3.45', b'-4.56', b'5.67'], dtype='|S5')
4
5>>> num_arr = num_str_arr.astype(np.float64)
6>>> num_arr
7array([ 1.23, -2.34, 3.45, -4.56, 5.67])
8>>> num_arr.dtype
9dtype('float64')
本篇文章来源于微信公众号: 码农设计师