numpy & pandas数据处理
numpy & pandas
numpy部分
numpy的属性
- array.ndim 输出行数
- array.shape 输出(行数,列数)
- array.size 输出元素的个数
numpy的创建
- a=np.array([2,3,4]) 输出:[2 3 4]
- a = np.array([2,3,4],dtype=np.float) 输出:[2. 3. 4.]
- a = np.zeros((3,4)) 生成3行4列的0矩阵
- a = np.ones((3,4)) 生成3行4列的1矩阵
- a = np.arange(10,20,2) (左边界,有边界,步长)生成[10,20)的数列:[10 12 14 16 18]
- a = np.arange(12).reshape(3,4) 生成从0-11的3行4列的矩阵
- a = np.linspace(1,10,5) 将1-10的线段分成5段:[ 1. 3.25 5.5 7.75 10. ]可以使用reshape(行,列)
numpy基础运算
加减法
import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
c=a-b
d=a+b
print(a,b,c,d)
#输出:[10 20 30 40] [0 1 2 3] [10 19 28 37]
乘方
import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
e=b**2
print(e)
角函数
import numpy as np
a=np.array([10,20,30,40])
np.sin(a)
print(a)
其他
- 矩阵乘法 c_dot = np.dot(a,b)
- 矩阵乘法2 c_dot = a.dot(b)
- 随机生成 a = np.random.random((2,4))
- 求和 np.sum(a) 最小值 np.min(a) 最大值 np.max(a)
- 上面的方法也可以 np.sum(a,axis=1 or 0 )1表示在每一行操作,0表示在每一列中操作
- 求最小值最大值的索引 np.argmin(A)
- 整个矩阵的平均值 np.mean(A)//A.mean()//np.average(A)//
- 中位数 np.median(A) 累加 np.cumsum(A) 差分 np.diff(A)
- 非零元素的索引,行列分开输出,np.nonzero
- 排序 np.sort(A) 每一行分别排序
- 转置矩阵 np.transpose(A) // A.T
- np.clip(A,X,Y) 所有小于X的数变成X,所有大于Y的数变成Y,X-Y的数保持不变
- mean方法也可以使用axis=1 or 0 分别对行列操作
numpy 索引
- 如同数列一样,可以用a[i][j] 表示索引 或 a[i,j]
- a[1,:]第二行所有数 a[:,1]第二列的所有数
- a[1,x:y]第二行的(x,y]的数
- for row in a 每一行进行操作
- 转化为一维的向量 A.flatten()
numpy 的 array 合并
import numpy as np
a=np.array([1,1,1])
b=np.array([2,2,2])
c=np.vstack((a,b))#上下合并
d=np.hstack((a,b))#左右合并
print(c)
print(c.shape)
print(d)
print(d.shape)
#输出
#[[1 1 1]
# [2 2 2]]
#(2, 3)
#[1 1 1 2 2 2]
#(6,)
- 维度拓展 a[np.newaxis,:] [1,1,1] 变成 [[1,1,1]]
- 合并2 np.concatenate((a,b,b,a),axis=0 or 1)0纵向 1 横向
numpy 的 array 分割
- np.split(array,块数,axis=0 or 1) 不等分割无法用split分割
- np.array_split 可以进行不等分割
- np.vsplit(A,块数)纵向分割 np.hsplit(A,块数) 横向分割
numpy copy & deepcopy
- a=b 是将b的索引赋给a,所以指向同一块内存区域(b改变a也改变)
- a=b.copy 将b的值赋给a(b改变,a不会改变)deepcopy
pandas 部分
pandas 基本介绍
与numpy不同点在于,pandas更类似于一个字典
- dates = pd.date_range('20190101',periods=6) 打印日期格式,从2019-01-01开始,打印6天的日期
- df = pd.DataFrame(np.random.randn(6,4),index=[1,2,3,4,5,6],columns=['a','b','c','d']),随机生成一个6行4列的随机矩阵,行列标签可以设置
- a.index 行索引 a,columns 列索引 a.values 所有的值数出来
- a.describe() pandas的所有属性
- a.sort_index(axis=1 or 0,ascending= False or true)ascending 表示正序True和倒序False
- a.sort_values(by-'E')对这个索引指向的列或行排序
pandas 数据选择
- a['A'] a[0:3]
- a.loc['20130102']
- a.loc[:,['a','b']] 行的信息保留,只打印a,b列,标签筛选
- a.iloc[x:y,i:j] x行-y行的i列-j列,序号筛选
- a.ix[:3,['a','c']]序号筛选+标签筛选
- a[a.A>8] 对于A列,大于8的部分
pandas 的设置值
与数据选择相同,定位好后可以直接更改数值
pandas 处理丢失数据
- a.dropna(axis = 0 or 1 )丢掉行或丢掉列
- a.dropna(axis =0 or 1 , how='any' or 'all') 全为nan 或者 有nan 就丢
- a.fillna(value = 0)把nan的位置填入0
- a.isnull() 返回是否为nan数据
- np.any(a.isnull())==True 整个表格中是否有nan数据
pandas 导入和导出数据
- a=pd.read_csv('aha.csv')
- a.to_csv('aha2.csv')
pandas 合并
- res = pd.concat([a,b,c],axis=0 or 1)0竖向 1横向
- res = pd.concat([a,b,c],axis=0,ignore_index=True)忽略行索引
- res = pd.concat([a,b,c],axis=0,join='inner' or 'outer' ,ignore_index=True)缺失数据是用nan,或者不保留、
- res = pd.concat([a,b,c],axis=1,join_axes=[a.index])
- res = a.append(b,ignore_index=True) 与列表的添加相同
- res = a.append([b,c])
pandas 合并 merge
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
Hao.Jia's Blog!
喜欢就支持一下吧