Numpy提供了对多维数组(矩阵)的高效支持,用于数据分析,我们遇到的数据一般都是存储在excel或者数据库表中的,大部分都是二维及以上的数据,而Numpy可以很好的处理多维数组(矩阵)比如下面的矩阵,可以使用Numpy对该矩阵进行很多运算操作起来很方便,在数据分析中也总能遇到矩阵,使用Numpy可以方便处理矩阵/
Pandas是建立在Numpy的基础上,提供了更多对二维数组的支持,因此使用Pandas对二维数组进行处理会更加得心应手。如以下的数据,使用Pandas可以很方便的对每一行,每一列进行操作。而对应到excel中,excel其实都是二维数据,因此使用Pandas处理excel也是很方便的。但注意这不是说Numpy就处理不了二维数据,它也可以处理。理清这层关系。
Numpy的核心是多维数组,是通过Ndarray对象做到的,它是一个灵活的数据容器。
下面开始使用Numpy,我是在本地IDEL上使用的。
1.创建一个一维数组:a1 = np.array([1,2,3,4,)
2.a1.shape知道它的形状,这里的输出就是(4,),如果是3行4列的数组,输出(3,4)
3.a1.size,输出数据的元素的个数
4.a1.dtype,输出数组里的元素的数据类型
import numpy as np
a1 = np.array([1,2,3,4])
a1
a1.shape
a1.size
a1.dtype
5.创建一个二维数组 : a2 = np.array([[1,2,3,4], [5,6,7,8]]),二维数组有上面同样的操作,就不再多说。
6.a2.min(),找到数组中的最小值。这里就是1,注意打上括号,这个是内置方法,不然就出现以下报错
这句话都意思就是min是内置方法。因此我们需要打上括号。
7.a2.ndim得到数组的维度,这里就是2
import numpy as np
a2 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
a2.min()
a2.ndim
8.使用其他命令创建多维数组
a1 = np.arange(n) //创建一维数组,跟range类似,生成0-nd的连续数字,不包括n。
a2 = np.ones((2,2))//创建全为1的22的数组,可以指定类型,默认是float,在我的电脑是float64,指定类型 :
a2 = np.ones((2,2), dtype = np.int64)
np.zeros与np.ones用法一样,就是数组中的元素全为0
np.empty 创建空值多维数组,只分配内存,不填充任何值;写法跟上面一样。
np.random.random 创建元素值为随机值的多维数组;np.random.random((2, 2)) //生成22的0-1的随机数,当然还有其他的随机数生成方法,链接如下。
https://www.cnblogs.com/DOMLX/p/9751471.html
9.Ndarray 对象还可以通过 reshape 方法变形为其他维度的数组:
a1 = np.arange(12)
a2 = a1.reshape(3,4)
索引方式就是数组的索引方式,当然python可以用·切片进行索引。有疑问可以去看其他博客
1.Numpy支持对数组的每一个元素加加上,减去,乘上一个常数,与普通变量的加减乘一样的写法,也支持两个数组之前的加减乘,这些就可以看看网上其他大佬的博客,但注意乘法不是矩阵的乘法,写出a*b,会把相同位置的元素乘起来,想要使用矩阵的乘法,使用命令a.dot(b)
2.Numpy支持的其他运算方式:
1.逻辑运算:
a = np.arange(12).reshape(4, 3)
b = a > 5
b
2.a.sum 计算多维数组的所有元素的和;
a.max 最大值计算;
a.min 最小值计算;
a.mean 平均值计算;
a.std 标准差计算;
a.var 方差计算;
上面的方法都可以指定计算哪一维的值:
a.sum(axis=0) 计算第一维的所有元素的和,其他的使用方法一样。注意要加括号,因为它们是内置方法,上面我就没有加,不要被迷惑了
上面就是一些总结,其他的还有很多,需要我们不断总结。
Pandas的使用:
我这次的总结想换一个方式,干脆直接在实际中去总结,使用Pandas处理excel文件:
Series 和 DataFrame 是 Pandas 中的两种核心数据结构,大部分 Pandas 的功能都围绕着两种数据结构进行。
Series就是一维数组,DataFrame就是二维数组。
import pandas as pd
df = pd.read_excel('test.xls', sheet_name = 1, index_col = '序号', skiprows = [1,5], usercols = [0,2,4])
data.head()
pd.read_excel里面有很多可选参数,第一个参数是必有的参数。下面解释一下常用的参数。
sheet_name 读取excel文件中的工作表。可以使用三种方式。
1.整形数字,表示读取excel文件中的第几张工作表,使用方法sheet_name = 1(读取第二张工作表,从0开始)
2.SheetN,代表第N张工作表,从1开始,S要大写,sheet_name = ‘Sheet5’ (读取第五张工作表)但是注意这里Sheet5没有被重命名才可以这样做,如果被重命名·,需要使用名称进行读取
3.工作表的名称。sheet_name = '成绩‘
4.可以读取多个工作表,sheet_name = ['成绩’, ‘学分’]
data.head() 用做索引的行,就是列的名字,列的索引,默认为第一行
index_col 用做索引的列,就是行的索引,如这里就可以用序号做列的索引。
usercols 需要读取的列
skiprows跳过特定的行。
然后通过上面的读取,就可以读取到一个DateFrame数据df.可以看到,使用pandas读取很灵活,有很多可选参数帮助我们读取的我们想要的DateFrame数据。
之后可以对df 进行pandas提供的操作
1.将函数应用到每行或者每一列上面,DataFrame 的 apply 方法可以实现此功能(axis=0 时代表分别统计每列上的数据,axis=1 时,代表分别统计每一行上的数据,多维可以类推)
import pandas as pd
//使用英雄名称做行的索引
df = pd.read_excel('test.xls', sheet_name = 1, index_col = '英雄名称', skiprows = [1,5], usercols = [0,2,4])
data.head()
df['初始血量]//访问初始血量列。
df[df.columns[0:2]]//df.columns获取到每一列,后面的切片获取到指定列。
df.loc['混沌骑士'] //使用loc属性使用行名获取特定行
df.loc['混沌骑士':'龙骑士'] //获取混沌骑士到龙骑士的所有行,当然混沌骑士可以被获取,龙骑士获取不到
df.iloc[0]//通过iloc属性使用整型数字访问行
df.iloc[0:2]
df.loc[:, ['初始血量', '初始攻击', '初始物抗']]//通过loc属性访问列。
df.loc['混沌骑士', '初始血量']//获取特定行特定列的元素
df.loc['混沌骑士':'龙骑士', '初始血量':'初始先手']//切片获取部分行,部分列
def f(x): return x.max() - x.min()
df.apply(f, axis = 1) //统计每一行的极差
df1.applymap(lambda x: x+1)//将函数运用到每一个元素,lambda表示式
df1.describe()//describe 方法显示了一些常用的统计信息
上面我用的是//在后面,因为这样看得更加清楚,注意了python中的注释方式是 # 和 ‘’’ ‘’’ (单引号)和""" “”"(双引号)
上面使用了一些常用pandas的操作,当然还有很多操作,需要不断总结,注意pandas操作的数据是DataFrame或者Series数据。
还有就是describe 方法显示了一些常用的统计信息,具体解释如下:
count 元素值的数量;
mean 平均值;
std 标准差;
min 最小值;
25% 下四分位数;
50% 中位数;
75% 上四分位数;
max 最大值;
至于其他的操作,还有很多,这一次也总结不完,需要不断总结,比如两个数据的合并和分组啊,比如如果数据带有时间戳,有的时候我们需要根据这个时间戳进行运算,可以使用时间处理方面的相关功能,它主要集中在 datetime 包。
今天总结了一些Numpy和Pandas的一些操作,还总结了使用pandas对excel文件进行处理,这些在我们的日常工作还是比较有用的,之前总结过使用xlrt,xlwd处理excel,现在我们可以使用pandas处理excel,它更加强大。如果数据需要与时间相关,使用datetime包。
就这样,拜拜,如果有任何问题,欢迎指正。非常感谢