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基础运算

    加减法
    1
    2
    3
    4
    5
    6
    7
    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]

乘方

1
2
3
4
5
import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
e=b**2
print(e)

角函数

1
2
3
4
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 合并

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 导入和导出数据

1.png
`1.png

  • 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

坚持原创技术分享,您的支持也将成为我的动力!
-------------本文结束感谢您的阅读-------------
undefined