numpy pandas 初识

#array
import numpy as np
array = np.array([[1,2,3],[4,5,6]])
print(array)
print(array.size) #输出大小 6个元素
print(array.shape) #输出形状 (2,3) 2行3列

#array 类型dtype
import numpy as np
array1 = np.array([3,3,3],dtype=np.int64) #可以有int,int32,float32 等 默认int 是int32
print(array1.dtype)


import numpy as np
a = np.zeros((3,4)) #这里有个元组(3,4),得到的形状就是3行4列的矩阵
print(a) #输出一个3行4列的为0的矩阵

b = np.ones((3,4)) #3行4列结果为1的矩阵
print(b)

c = np.empty((3,4)) #说是为空结果都是1
print(c)

d = np.arange(10,20,2) #10到20 步长为2 的数列 ,这里只是单纯的等差数列
print(d)

e = np.arange(12).reshape((3,4))
print (e) #从0-11 生成3行4列 矩阵

f = np.linspace(1,10,4) #分成段,步长4
print(f)
import numpy as np
a = np.array([10,20,30,40]) #一个1行4列的矩阵
b = np.arange(3)
print(a,b)
c = a+b
print(c) #失败无法相加
#3X3 矩阵与3X1 矩阵相乘
import numpy as np
a = np.arange(1,10).reshape((3,3))
print(a)
print('*')
b = np.arange(2,5).reshape((3,1))
print(b)
print('=')
print(a*b)  #, 3X1 矩阵是3行1列,根据广播,他们可以相乘,3行1列的二维数组可以看成3行3列的数组,只不过每一行的值都相同,然后相应的位置的值相乘

#3X3 矩阵与1X3 矩阵相乘
import numpy as np
a = np.arange(1,10).reshape((3,3))
print(a)
print('*')
b = np.arange(2,5).reshape((1,3))
print(b)
print('=')
print(a*b)  #, 1X3 矩阵是1行3列,每个元素分别与3X3矩阵相应的列的元素相乘得到新矩阵对应位置的值
# 后面的矩阵必须是要么相同的行数 1列,要么是相同的列数 1行 广播的原则
#3X3 矩阵与2X3 矩阵相乘【报错】
import numpy as np
a = np.arange(1,10).reshape((3,3))
print(a)
print('*')
b = np.arange(1,7).reshape((2,3))
print(b)
print('=')
print(a*b) #ValueError: operands could not be broadcast together with shapes (3,3) (2,3)


#3X3 矩阵与int相乘
import numpy as np
a = np.arange(1,10).reshape((3,3))
print(a)
print('*')
print(2)
print('=')
print(a*2) #每个元素分别乘以2



#3X3  多维数组相乘直接* 【不是矩阵相乘】
import numpy as np
a = np.arange(1,10).reshape((3,3))
print(a)
b = np.ones((3,3))
print('*')
print(b)
print('=')
print(a*b) #相同的位置分别相乘


#以上的运算都是数组之间的运算,下面模拟矩阵的运算:
# 3X2 和 2X3 矩阵相乘用 dot
import numpy as np
a = np.array([[1,0,2],[-1,3,1]])
b = np.array([[3,1],[2,1],[1,0]])
print(np.dot(a,b)) #dot 矩阵的相乘  也可以写成 a.dot(b)
#矩阵最大 最小 求和
import numpy as np
a=np.random.random((2,4))
print(a)
print(np.max(a)) #矩阵里最大,最小和求和
print(np.min(a))
print(np.sum(a))
print(np.max(a,axis=0)) #取一行值,行每个位置对应的列的最大值
print(np.min(a,axis=0)) #取一行值,行每个位置对应的列的最小值
print(np.min(a,axis=1)) #取一列值(2个值),列所在每个行的最小值
print(np.max(a,axis=1)) #取一列值(2个值),列所在每个行的最小值
print(np.mean(a,axis=0)) #按行,每个元素是所在列的平均值
print(np.mean(a,axis=1)) #按列,每个元素是所在行的平均值
#取索引
import numpy as np
a = np.arange(2,14).reshape(3,4)
print(a)
print(np.argmin(a))  #索引最小肯定是0
print(np.argmax(a))  #最大11
print(np.mean(a)) #平均 7.5
print(a.mean()) #平均 7.5
print(np.average(a)) #平均 7.5
print(np.median(a)) #中位数 7.5
print(np.cumsum(a)) #累加
print(np.diff(a)) #累差 结果得到了3行3列的值
print(np.nonzero(a)) #返回不为0元素的行的索引  和列的索引
print(a[np.nonzero(a)]) #按照索引取值
print(np.sort(a)) #排序
print(a.T)  #矩阵转置  元素 2,3 变成 3,2
print(np.transpose(a))  #矩阵转置  元素 2,3 变成 3,2
print(np.clip(a,3,9)) #大于9的变成9  小于3的变成3
#索引
import numpy as np
a = np.arange(3,15)
print(a)
print(a[3]) #取6

b = np.arange(3,15).reshape(3,4)
print(b)
print(b[0,3])
print(b[0][3])

for row in a: #打印所有元素
    print(row)

for column in a.T: #和上面效果一样
    print(column)


for item in a.flat:
    print(item)

print(a.flatten())  # 打印一行
#合并
import numpy as np
a = np.array([1,1,1])
b = np.array([2,2,2])
print(np.vstack((a,b))) #垂直合并
print(np.hstack((a,b))) #水平合并
print(np.hstack((a,b)).shape) #(6,) 形状
print('>>>')

c = np.vstack((a,b))
print(a.shape) #(3,)
print(b.shape) #(3,)
print(c.shape) #(2,3)
print(a)
print(a.T) #转置,但是没有变化
print(b.T)
print(c.T)
print('>>>')

print(a[:,np.newaxis]) #这样就可以转置了
print(b[:,np.newaxis])
print('>>>')

c = np.concatenate((a,a,b,b)) #合并多次
print(c)
a = a[:,np.newaxis]
b = b[:,np.newaxis]
c = np.concatenate((a,b,b,a),axis=1) #按列
print(c)
#分割
import numpy as np
a = np.arange(12).reshape((3,4))
print(a)
print(np.array_split(a,2,axis=1)) #按列

print(np.array_split(a,3,axis=0)) #按行 分三块 ,横向能否分2块?
print(np.array_split(a,2,axis=0)) #也可以
print(np.array_split(a,3,axis=1)) #也可以

print(np.vsplit(a,3)) #垂直
print(np.hsplit(a,2)) #水平


#赋值 拷贝
import numpy as np
a = np.array([1,2,3,4])
b = a
c = b
a[0]=11
print(a)
print(c)

c[3]=44
print(a)
print(c) #都变化

d = a.copy() #深copy
a[1]=22
print(a) #a变化 d没有
print(d)
#pandas DataFrame
import numpy as np
import pandas as pd
s = pd.Series([1,2,3,4,'hello',np.nan])
print('>>>' ,s)

dates = pd.date_range('20200101',periods=6) # 6个日期
print('>>>',dates)

#前方高能
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['c1','c2','c3','c4']) #index是表格的行表头,columns是列表头
print(df)

print(df.dtypes) #所有列的类型
print(df.columns) #上表头
print(df.values) #值
print(df.index) #左侧表头

#前方高能
print(df.describe())  #只针对数字形式
#count 计数
#mean 平均值
#std 标准差
#min 最小
#max 最大
#25 % 50% 75%

print(df.T) #转置

df.sort_index(axis=1,ascending=False) #按列
print(df)
df.sort_index(axis=0,ascending=False) #按行
print(df)
df.sort_values(by='c2') #好像没成功
print(df)
posted on 2020-09-18 18:18  94小渣渣  阅读(152)  评论(0编辑  收藏  举报