这几天由于对excel的模块使用及数据分析处理的需求,看了下pandas,分享一下。

1.pandas之numpy 1.1NumPy是Python数值计算最重要的基础包。很多都采用NumPy的数组作为构建基础。 NumPy自己并没有提供很高级的数据分析处理功能,理解NumPy数组及面向数组的计算是为了更加高效方便的使用pandas。

1.2创建ndarray

创建序列最简单就是使用array函数,举几个简单例子:

import numpy as np
my_arr = np.random.randn(2,3)
print(my_arr)

结果如下: [[-2.30239282 -0.49235142 0.66086362] [-1.59935706 -0.95671158 0.42411401]] 当我们输入列表转换:

L = [4,2,2.3,9,8]
my_arr = np.array(L)
print(my_arr)

结果: [4. 2. 2.3 9. 8. ] 当我们嵌套序列:

L1 = [[4,2,3,9,8],[5,6,0,1,7]]
my_arr1 = np.array(L1)
print(my_arr1)

结果: [[4 2 3 9 8] [5 6 0 1 7]] 又一组等长列表(注意一定是等长)组成的列表会被转换成一个多维数组。

print(my_arr1.ndim)
print(my_arr1.shape)

结果: 2 (2, 5) 以上可以用属性ndim和shape验证,ndim返回数组的维度,shape返回各位维度大小的元祖。dtype返回数组数据类型。astype转换数组的数据类型。 问:整形数据不应该是int吗?浮点型数据不应该是float吗? 解:int32、float64是Numpy库自己的一套数据类型。

arange是Python内置函数range的数组版:

my_arr2 = np.arange(10)
print(my_arr2)

结果: [0 1 2 3 4 5 6 7 8 9] 你可以通过ndarray的astype方法明确地将一个数组从一个dtype转换成另一个dtype;如果将浮点数转换成整数,则小数部分将会被截取删除;如果某字符串数组表示的全是数字,也可以用astype将其转换为数值形式: 实例1:

L = [4,2,3,9,8]
my_arr = np.array(L)
print(my_arr.dtype)
float_my_arr = my_arr.astype(np.float64)
print(float_my_arr.dtype)

结果: int32 float64

实例2:

L = [4.1,2.2,3.9,9.2,8.4]
my_arr = np.array(L)
print(my_arr.dtype)
float_my_arr = my_arr.astype(np.int32)
print(float_my_arr.dtype)
print(float_my_arr)

结果: float64 int32 [4 2 3 9 8]

实例3:

L2 = ['1.50','9.9','40','-10']
my_arr2 = np.array(L2,dtype=np.string_)
my_arr2_str = my_arr2.astype(float)
print(my_arr2_str.dtype)
print(my_arr2_str)

结果: float64 [ 1.5 9.9 40. -10. ]

2.NumPy数组的运算 大小相等的数组之间的任何运算都会将运算应用到每个元素,例如:

L1 = [[4,2,3,9,8],[5,6,0,1,7]]
my_arr1 = np.array(L1)
print(my_arr1)
print(my_arr1 * my_arr1)

结果: [[4 2 3 9 8] [5 6 0 1 7]] [[16 4 9 81 64] [25 36 0 1 49]] 大小相同的数组之间的比较会生成布尔值数组: L1 = [[4,2,3,9,8],[5,6,0,1,7]] L2 = [[1,2,3,4,5],[6,7,8,9,2]] my_arr1 = np.array(L1) my_arr2 = np.array(L2) print(my_arr1 > my_arr2) 结果: [[ True False False True True] [False False False False True]]

3.NumPy数组的切片,索引 由于此处书里内容较多,偏于很大,不做详细介绍,简单写一下。 切片索引ndarray的切片语法跟Python列表这样的一维对象差不多,直接切片 二维数组,它是沿着第0轴(即第一个轴)切片的。也就是说,切片是沿着一个轴向选取元素的。表达式L_arr[:2]可以被认为是“选取L_arr的前两行”。

布尔型索引: 数组的长度必须跟被索引的轴长度一致。此外,还可以将布尔型数组跟切片、整数(或整数序列,稍后将对此进行详细讲解)混合使用。注意:如果布尔型数组的长度不对,布尔型选择就会出错。 花式索引它指的是利用整数数组进行索引,花式索引跟切片不一样,它总是将数据复制到新数组中。