私聊做毕设或者实验课题。
1.介绍
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库
2.基本使用
1.首先需要导入numpy包,使用pip install numpy下载安装包,使用dtype转化数据类型
import numpy as np
import random
#数组类型
array = np.array([1, 2, 3])
print(array)
print(type(array))
array2 = np.array(range(10))
print(array2)
t3=np.arange(10)
print(t3)
t4=np.arange(4,8,2)
print(t4)
#numpy里面的数据类型
t5=np.array(range(1,4),dtype="float32")
print(t5)
print(t5.dtype)
t6=np.array([0,1,0,1],dtype="bool")
print(t6)
print(t6.dtype)
#调整数据类型
t7=t6.astype("i8")
print(t7)
print(t7.dtype)
#numpy中的小数
t8=np.array([random.random() for i in range(10)])
print(t8)
print(t8.dtype)
t9 = np.round(t8, 2)
print(t9)
输出
[1 2 3]
<class 'numpy.ndarray'>
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[4 6]
[1. 2. 3.]
float32
[False True False True]
bool
[0 1 0 1]
int64
[0.81783996 0.4754238 0.62353824 0.26188562 0.64390433 0.44740063
0.36523649 0.96967843 0.73645357 0.34591022]
float64
[0.82 0.48 0.62 0.26 0.64 0.45 0.37 0.97 0.74 0.35]
2.shape返回的是一个元组类型,分别代表行和列。 reshape修改数据的维度,flatten将二维数组转变成一维数组
import numpy as np
t1=np.arange(12)
print(t1.dtype)
print('t1->****',t1.shape)
#生成多个一维数组
t2=np.array([[1,2,3],[4,5,6]])
print('t2->*****',t2)
#2代表行,3代表列
print('t2.shape->*****',t2.shape)
#修改一维数组变成2维数组
print('t1.reshape->*****',t1.reshape(3,4))
t3=np.arange(24).reshape(2,3,4)
print('t3->*****',t3)
print('t3.reshape->*****',t3.reshape(4,6))
t4=t2.reshape(6,)
print('t4->*****',t4)
#将二维数组变成一维数组
t5=t2.reshape((t2.shape[0]*t2.shape[1]))
print('t5->*****',t5)
#flatten也是将二维数组变成一维数组
t6=t2.flatten()
print('t6->*****',t6)
输出
int32
t1->**** (12,)
t2->***** [[1 2 3]
[4 5 6]]
t2.shape->***** (2, 3)
t1.reshape->***** [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
t3->***** [[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
t3.reshape->***** [[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
t4->***** [1 2 3 4 5 6]
t5->***** [1 2 3 4 5 6]
t6->***** [1 2 3 4 5 6]
3.数组的计算
import numpy as np
t1=np.arange(24).reshape(4,6)
print(t1)
print("---*******************-------")
print(t1+2)
print("---*******************-------")
print(t1*2)
print("---*******************-------")
print(t1/2)
print("---*******************-------")
print(t1/0)
print("---*******************-------")
t2=np.arange(100,124).reshape(4,6)
print(t2)
print("---*******************-------")
print(t1+t2)
print("---*******************-------")
print(t1*t2)
print("---*******************-------")
t3=np.arange(0,6)
print(t3)
print(t1-t3)
print("---*******************-------")
t4=np.arange(4).reshape(4,1)
print(t4)
print(t1-t4)
输出
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
---*******************-------
[[ 2 3 4 5 6 7]
[ 8 9 10 11 12 13]
[14 15 16 17 18 19]
[20 21 22 23 24 25]]
---*******************-------
[[ 0 2 4 6 8 10]
[12 14 16 18 20 22]
[24 26 28 30 32 34]
[36 38 40 42 44 46]]
---*******************-------
[[ 0. 0.5 1. 1.5 2. 2.5]
[ 3. 3.5 4. 4.5 5. 5.5]
[ 6. 6.5 7. 7.5 8. 8.5]
[ 9. 9.5 10. 10.5 11. 11.5]]
---*******************-------
[[nan inf inf inf inf inf]
[inf inf inf inf inf inf]
[inf inf inf inf inf inf]
[inf inf inf inf inf inf]]
---*******************-------
[[100 101 102 103 104 105]
[106 107 108 109 110 111]
[112 113 114 115 116 117]
[118 119 120 121 122 123]]
---*******************-------
[[100 102 104 106 108 110]
[112 114 116 118 120 122]
[124 126 128 130 132 134]
[136 138 140 142 144 146]]
---*******************-------
[[ 0 101 204 309 416 525]
[ 636 749 864 981 1100 1221]
[1344 1469 1596 1725 1856 1989]
[2124 2261 2400 2541 2684 2829]]
---*******************-------
[0 1 2 3 4 5]
[[ 0 0 0 0 0 0]
[ 6 6 6 6 6 6]
[12 12 12 12 12 12]
[18 18 18 18 18 18]]
---*******************-------
[[0]
[1]
[2]
[3]]
[[ 0 1 2 3 4 5]
[ 5 6 7 8 9 10]
[10 11 12 13 14 15]
[15 16 17 18 19 20]]
4.读取外部数据,delimiter=','指明分割符,dtype,指明数据类型,unpack数据转置,还可以使用transpose(),T(),swapaxes()方法进行转置
import numpy as np
path = './num.txt'
data1 = np.genfromtxt(path,delimiter=',',dtype=int)
data2 = np.genfromtxt(path,delimiter=',',dtype=int,unpack=True)
print(data1)
print(data2)
print(np.shape(data1)[0])
#转置,也可以data1.T
print(data1.transpose())
#转置,将0轴和1轴进行转化
print((data1.swapaxes(1,0)))
输出
[[23 4 5 5]
[45 23 23 12]
[12 3 4 1]]
[[23 45 12]
[ 4 23 3]
[ 5 23 4]
[ 5 12 1]]
3
[[23 45 12]
[ 4 23 3]
[ 5 23 4]
[ 5 12 1]]
[[23 45 12]
[ 4 23 3]
[ 5 23 4]
[ 5 12 1]]
5.索引和切片
import numpy as np
data=np.arange(24).reshape(4,6)
print(data)
print("*"*100)
#取行
print(data[2])
#取联系多行
print(data[2:])
print(data[[0,2,3]])
print("*"*100)
#取列
print(data[1,:])
print(data[2:,0])
print(data[2:,[0,1]])
print(data[2:,1:])
print("*"*100)
#取不相邻的点 代表坐标(0,0),(1,1),(2,2)这个点
print(data[[0,1,2],[0,1,2]])
输出
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
****************************************************************************************************
[12 13 14 15 16 17]
[[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[[ 0 1 2 3 4 5]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
****************************************************************************************************
[ 6 7 8 9 10 11]
[12 18]
[[12 13]
[18 19]]
[[13 14 15 16 17]
[19 20 21 22 23]]
****************************************************************************************************
[ 0 7 14]
6.更多索引操作
import numpy as np
data=np.arange(24).reshape(4,6)
print(data)
print(data[2:,1:])
print(data<10)
data[data<10]=3
print(data)
data2 = np.where(data<10,0,10) #if data<10 则赋予10,反之赋予10
print(data2)
print("*"*100)
data3=np.arange(24).reshape(4,6)
data4=data3.clip(10,18) #小于10的替换成10,大于18的替换成18
print(data4)
输出
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[[13 14 15 16 17]
[19 20 21 22 23]]
[[ True True True True True True]
[ True True True True False False]
[False False False False False False]
[False False False False False False]]
[[ 3 3 3 3 3 3]
[ 3 3 3 3 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[[ 0 0 0 0 0 0]
[ 0 0 0 0 10 10]
[10 10 10 10 10 10]
[10 10 10 10 10 10]]
****************************************************************************************************
[[10 10 10 10 10 10]
[10 10 10 10 10 11]
[12 13 14 15 16 17]
[18 18 18 18 18 18]]
7.数组的拼接
import numpy as np
data1=np.arange(0,12).reshape(2,6)
print(data1)
data2=np.arange(12,24).reshape(2,6)
print(data2)
#竖直拼接
vstack= np.vstack((data1, data2))
print(vstack)
#水平拼接
hstack = np.hstack((data1, data2))
print(hstack)
#数组的行列交换
vstack[[1,2],:]= vstack[[2,1],:]
print(vstack)
#数组的列交换
vstack[:,[1,2]]=vstack[:,[2,1]]
print(vstack)
输出
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
****************************************************************************************************
[[12 13 14 15 16 17]
[18 19 20 21 22 23]]
****************************************************************************************************
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
****************************************************************************************************
[[ 0 1 2 3 4 5 12 13 14 15 16 17]
[ 6 7 8 9 10 11 18 19 20 21 22 23]]
****************************************************************************************************
[[ 0 1 2 3 4 5]
[12 13 14 15 16 17]
[ 6 7 8 9 10 11]
[18 19 20 21 22 23]]
****************************************************************************************************
[[ 0 2 1 3 4 5]
[12 14 13 15 16 17]
[ 6 8 7 9 10 11]
[18 20 19 21 22 23]]
8.zeros和ones
import numpy as np
data1=np.arange(0,12).reshape(2,6)
data2=np.arange(12,24).reshape(2,6)
ze=np.zeros((data1.shape[0],1)).astype(int)
one=np.ones((data2.shape[0],1)).astype(int)
hstack1= np.hstack((data1, ze))
hstack2=np.hstack((data2,one))
final_stack=np.vstack((hstack1,hstack2))
print(final_stack)
输出
[[ 0 1 2 3 4 5 0]
[ 6 7 8 9 10 11 0]
[12 13 14 15 16 17 1]
[18 19 20 21 22 23 1]]
9.eye,argmax,argmin
import numpy as np
data=np.arange(0,24).reshape(4,6)
#其他方法
#创建一个全为0的数组
zeros= np.zeros((3,3), dtype=int)
print(zeros)
#创建一个全为1的数组
ones = np.ones((3, 3), dtype=int)
print(ones)
#生成一个对角线为1的方正
eye= np.eye(3,dtype=int)
print(eye)
#获取最大值的位置 axios=0代表竖轴,axios=1代表的是横轴
argmax = np.argmax(data, axis=0)
print(argmax)
#获取最小值的位置
eye[eye==1]=-1
print(eye)
argmin=np.argmin(data,axis=0)
print(argmin )
输出
[[0 0 0]
[0 0 0]
[0 0 0]]
[[1 1 1]
[1 1 1]
[1 1 1]]
[[1 0 0]
[0 1 0]
[0 0 1]]
[3 3 3 3 3 3]
[[-1 0 0]
[ 0 -1 0]
[ 0 0 -1]]
[0 0 0 0 0 0]
10.随机数种子
import numpy as np
#指明一个随机数种子,这里如果指明seed=n,则下面跟seed=n的数组产生的随机数是相同的
np.random.seed(3)
randint = np.random.randint(10, 20, (4, 5))
print(randint)
np.random.seed(3)
randint2 = np.random.randint(10, 20, (4, 5))
print(randint2)
输出
[[18 19 13 18 18]
[10 15 13 19 19]
[15 17 16 10 14]
[17 18 11 16 12]]
[[18 19 13 18 18]
[10 15 13 19 19]
[15 17 16 10 14]
[17 18 11 16 12]]
11.isnan
import numpy as np
def final_num(t1):
for i in range(t1.shape[1]):
#得到每一列
temp_col=t1[:,i]
#计算数组中nan的数目
nan_num = np.count_nonzero(np.isnan(temp_col))
if nan_num !=0:
#因为连个nan等于false,所以这里统计每一列不为nan的数
temp=temp_col[temp_col == temp_col]
#将均值赋值给为nan的数据
temp_col[np.isnan(temp_col)] = temp.mean()
return t1
if __name__ == '__main__':
t1 = np.arange(12).reshape(3, 4).astype("float")
t1[1, 2:] = np.nan
print(t1[t1==t1])
print("*"*100)
print(final_num(t1))
输出
[ 0. 1. 2. 3. 4. 5. 8. 9. 10. 11.]
****************************************************************************************************
[[ 0. 1. 2. 3.]
[ 4. 5. 6. 7.]
[ 8. 9. 10. 11.]]
常用的统计函数
求和: t.sum(asix=None)
均值: t.mean(a,asix=None)
中值: np.median(asix=None)
最大值: t.max(asix=None)
最小值: t.min(asix=None)
极值: t.ptp(t,asix=None)
标准差: t.sttd(asix=None)
Pandas 处理非数值型的数据
-
Series 一维,带标签的数组
-
DataFrame 二维,Series容器
1.Series的初步了解
import pandas as pd
ser=pd.Series([1,2,3,4,5,6],index=list("abcdef"))
print(ser)
print("*"*100)
temp_dict={'name':'xiaozhao','age':30,"tel":100}
series = pd.Series(temp_dict)
print(series)
print("*"*100)
print(series['age'])
print(series[0])
print("*"*100)
print(series[['age','tel']])
print("*"*100)
print(list(series.index))
print(series.values)
输出
a 1
b 2
c 3
d 4
e 5
f 6
dtype: int64
****************************************************************************************************
name xiaozhao
age 30
tel 100
dtype: object
****************************************************************************************************
30
xiaozhao
****************************************************************************************************
age 30
tel 100
dtype: object
****************************************************************************************************
['name', 'age', 'tel']
['xiaozhao' 30 100]
2.读取外部数据并连接数据库
'''都取外部数据'''
import pandas as pd
import pymysql
df= pd.read_csv("dog.txt")
print(df)
conn = pymysql.connect(host='localhost', port=3306,
user='root', password='123',
db='db01', charset='utf8',cursorclass=pymysql.cursors.DictCursor)
str='select * from dept'
db=pd.read_sql(str,conn)
print(db)
输出
名字 年龄
0 aaa 11
1 bbb 12
2 ccc 13
deptno dname db_source
0 1 开发部 db01
1 2 研发部 db01
2 3 生产部 db01
3 4 技术部 db01
3.更多操作
import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(12).reshape(3,4),index=list("123"),columns=list("abcd"))
print(data.head(1))
print(data.info) #z展示dataForm里面的数据信息
print(data.describe()) #展示数据的统计信息
print(data.sort_values(by='c',ascending=False)) #by通过哪个属性进行排序,ascending=True,表示升序
print("*"*100)
print(data.loc['1']['a']) #根据标签索引获取数据
print(data.iloc[1][2]) #根据位置获取数据,这里是第2行第3列,所以显示6
print("*"*100)
#读取一行
print(data[:1])
#读取多行
print(data.iloc[[1,2]])
#读取多列
print(data[['a','b']])
print(np.array(data[1:]).flatten())
data.loc[4]=[1,2,3,4]
print('增加行\n',data)
data['e']=[1,2,3,4]
print('增加列\n',data)
print("*"*100)
#读取列,可以直接指明列的索引值
print(data['b'])
print("*"*100)
print(data[1:]['c'])
print('data.index->******',list(data.index))
print("*"*100)
data2=[{"name":'zhangsan','age':12},{'age':12,'tel':113},{"name":'zhangsan','age':12,'tel':113}]
data2_dataframe=pd.DataFrame(data2)
print(data2_dataframe)
print("*"*100)
mean = data2_dataframe['tel'].mean()
print(mean)
#这里mean如果不知名列会自动计算当前数据列的平均值,也可以指明列名如data2_dataframe['tel'].mean()
data2_dataframe=data2_dataframe.fillna(data2_dataframe.mean())
print(data2_dataframe)
print("*"*100)
data3=[[1,2,3],[4,5,6],[1,2,3],[2,3,4]]
data4=np.array(data3)
print(type(data4))
array = np.array(data3).flatten()
print(set(array))
输出
a b c d
1 0 1 2 3
<bound method DataFrame.info of a b c d
1 0 1 2 3
2 4 5 6 7
3 8 9 10 11>
a b c d
count 3.0 3.0 3.0 3.0
mean 4.0 5.0 6.0 7.0
std 4.0 4.0 4.0 4.0
min 0.0 1.0 2.0 3.0
25% 2.0 3.0 4.0 5.0
50% 4.0 5.0 6.0 7.0
75% 6.0 7.0 8.0 9.0
max 8.0 9.0 10.0 11.0
a b c d
3 8 9 10 11
2 4 5 6 7
1 0 1 2 3
****************************************************************************************************
0
6
****************************************************************************************************
a b c d
1 0 1 2 3
a b c d
2 4 5 6 7
3 8 9 10 11
a b
1 0 1
2 4 5
3 8 9
[ 4 5 6 7 8 9 10 11]
增加行
a b c d
1 0 1 2 3
2 4 5 6 7
3 8 9 10 11
4 1 2 3 4
增加列
a b c d e
1 0 1 2 3 1
2 4 5 6 7 2
3 8 9 10 11 3
4 1 2 3 4 4
****************************************************************************************************
1 1
2 5
3 9
4 2
Name: b, dtype: int64
****************************************************************************************************
2 6
3 10
4 3
Name: c, dtype: int64
data.index->****** ['1', '2', '3', 4]
****************************************************************************************************
name age tel
0 zhangsan 12 NaN
1 NaN 12 113.0
2 zhangsan 12 113.0
****************************************************************************************************
113.0
name age tel
0 zhangsan 12 113.0
1 NaN 12 113.0
2 zhangsan 12 113.0
****************************************************************************************************
<class 'numpy.ndarray'>
{1, 2, 3, 4, 5, 6}
网友评论