在对数组做运算之前,可能会对数据做一些预处理。例如数据类型的转换,缺失值的处理,重复值的处理等。如果没做好这些预处理,后续数组的运算将无法进行下去。
虽然要求NumPy数组的数据类型相同,但仍可能会遇到数据类型不一致的数组,或者用户需要将数组转换成指定的数据类型。数组的数据类型转换可以使用astype()函数,示例代码如下:
运行结果如下:
上面代码中只演示了'int'(整数)、'float'(小数)和'str'(字符串)3种常见数据类型的转换,更详细的数据转换类型见表3-1。
表3-1 数据类型
在表3-1中的datetime64(日期类型)的转换也比较常见,将文本型日期转换为标准日期没问题,但如果将数字转换为对应的日期,处理方式有些不同,示例代码如下:
运行结果如下:
通过观察运行的结果,发现数字转换为日期时,日期的第1天是从1970/1/1开始的,而不同开发环境的起始日期可能不相同,好在Pandas提供了pd.to_datetime()函数,可以让用户自定义起始日期,例如转换arr=np.array([0,12525,145]),示例代码如下:
运行结果如下:
上面代码的核心函数是pd.to_datetime(),第1参数指定要转换arr数组,unit='D'表示把arr数组中的数字视为单位天,origin='1899-12-30'用于设置起始日期。
下面测试一下将Excel文件中的数字转换成对应的日期,如图3-2和图3-3所示,示例代码如下:
运行结果如图3-3所示。
图3-2 出生日期转换前
图3-3 出生日期转换后
注意: Pandas和NumPy中的很多函数都有dtype参数,表明可以在参数中设置数据类型,关于更多的数据类型可以参考表3-1。
缺失值是指没有任何值的空元素,例如导入Excel文件后,如果某个单元格没有任何值,则会显示为NaN或者NaT(缺失时间)。当然,在NumPy中也可以通过np.nan来生成缺失值。
要判断数组中是否有缺失值,可使用np.isnan()函数,将返回由布尔值组成的数组。还可以给缺失值填充指定的值,例如将缺失值填充数字100,示例代码如下:
运行结果如下:
在做数据预处理时,去重复处理是比较常见的处理方式。在NumPy中,可以使用np.unique()函数,示例代码如下:
运行结果如下:
如果对多维数组做去重复处理,最后返回的是具有唯一值的一维数组,示例代码如下:
运行结果如下: