一、前记

这两天一直在写项目,有些东西还真的值得记录一下。这里的所有东西都是在python3环境下面进行演示。

二、Numpy(安装过程省略)

1、作用

Numpy是一个支持大量的尺寸多维与矩阵运算的库。

2、array(中文意思就是:数组)

格式:array(object,dtype= ,copy=True(False),order=None,subok=False,ndmin=0)

名称:
    object:数组和嵌套的数列
    dtype:数组的数据类型(int,float...)
    copy:对象是否需要复制
    order:创建数字的样式,C为行方向,F为列方向,A为任意方向(默认是为A)
    subok:默认返回一个与基类类型一致的数组
    ndmin:指定生成数组的最小维度
    
数组属性(名称.函数)
    ndarray.shape(n,m)  //n行m列
    ndarray.size(n)    //n个值
    ndarray.ndim()    //用于返回数组的维度

3,运行计算

①加减法
根据线性代数运算规则可知,只有相同的行列才会进行加减运算,行列不一样的矩阵是不能在一起运算的。
(过于简单不做演示)

②乘法
在Numpy里面矩阵的乘法有两种:一种是直接相乘a×b,另外一种是矩阵相乘dot(a,b)
print(data1*data2)
print(dot(data1,data2))
-LHRXK6S---C-J3P-WGX4EE

当然另外还包含的有一个矩阵的求和和(sum(a)),有找矩阵的替代(min(a)),有找矩阵替代(max(a)),有找矩阵的替代索引(argmax (a)不再一一叙说。

4,进行整体运算和随机值产生

①随机值:Numpy给了3种随机值的表达方式:
第一种是random.random()(只能生成一维数组,且范围在(0,1))
第二种是random.randn()(能生成多维数组,且范围不做限制)
第三种是random.rand()(能生成多维数组,范围在(0,1))

②整体运算
平均值:np.average()或者np.mean()
中位数:np.median()
累加:np.cumsum()
逐行排序:np.sort()
矩阵反相(行列转换):np.transpose()T0Y2DX-50WD9-X6JWLO-LKB

查找范围数字:np.clip(A,min,max)

5,分割

np.split(A,n,axis=0(1)) //分割矩阵A为n部分,分割方式为axis=0/1(行/列分割),这种方法必须要求能是n的倍数

np.array_split(A,n,axis= ) //可以进行不等分割

np.rsplit(a,n) //纵向分割
np.hsplit(a,n) //横向分割

三、pandas

用于数据挖掘和数据分析

1、数据结构用法

①Series:通过一个list对象来创建一个Series。
Series函数里面必须要有data,其他的都可以作为默认选项。

encoding:utf-8
from numpy import *
from pandas import *

s = Series(data=[1,2,3,4,nan,5])
print(s)
"""
结果为:
0    1.0
1    2.0
2    3.0
3    4.0
4    NaN
5    5.0
dtype: float64
"""

index是里面每一行的标签,也就是说每一行的索引我们都可以自行定义。

#encoding:utf-8
from numpy import *
from pandas import *

s = Series(data=[1,2,3,nan,4],index=["num1","num2","num3","not a number","num4"])
print(s)
"""
num1            1.0
num2            2.0
num3            3.0
not a number    NaN
num4            4.0
dtype: float64
"""

②时间索引data_range('开始',periods=循环几次)

print(date_range('20200304',periods=3))
"""
DatetimeIndex(['2020-03-04', '2020-03-05', '2020-03-06'], dtype='datetime64[ns]', freq='D')
"""

③DataFrame
是一个带有索引的二维数据结构,每列可以有自己的名字,并且可以有不同的数据类型。(DataFrame是Pandas最常用的一种数据类型
一样的,在DataFrame里面也是data必须存在,其他的选项为默认选项。

s=DataFrame(data=[[1,2],[3,4]],index=["num1","num2"],columns=["num1","num2"])
print(s)
"""
 num1  num2
num1     1     2
num2     3     4
"""

2、有关于得到矩阵信息和变换矩阵的用法

①使用describe()进行矩阵的信息总结

s=DataFrame(data=[[1,2],[3,4]],index=["num1","num2"],columns=["num1","num2"])
print(s.describe())
"""
           num1      num2
count  2.000000  2.000000
mean   2.000000  3.000000
std    1.414214  1.414214
min    1.000000  2.000000
25%    1.500000  2.500000
50%    2.000000  3.000000
75%    2.500000  3.500000
max    3.000000  4.000000
"""

从这里可以清晰的看出num每一列的情况

①行列互换

s=DataFrame(data=[[1,2],[3,4]],index=["num1","num2"],columns=["num1","num2"])
print(s.T)
"""
      num1  num2
num1     1     3
num2     2     4
"""

②对标签进行正倒序排列
格式:s.sort_index(axis=0(1),ascending=False(倒序)/True(正序)

s=DataFrame(data=[[1,2],[3,4]],index=["b","a"],columns=["num1","num2"])
print("this is original s-- ")
print(s)
print("this is change s--")
print(s.sort_index(axis=0,ascending=True))
"""
this is original s-- 
   num1  num2
b     1     2
a     3     4
this is change s--
   num1  num2
a     3     4
b     1     2
"""

③对某一行或者某一列里面的值进行一个排序
格式:s.sort_values(by="行名(列名)",ascending=False(倒序)/True(正序)

s=DataFrame(data=[[1,2],[3,4]],index=["b","a"],columns=["num1","num2"])
print("this is original s-- ")
print(s)
print("this is change s--")
print(s.sort_values(by='num1',ascending=False))
"""
this is original s-- 
   num1  num2
b     1     2
a     3     4
this is change s--
   num1  num2
a     3     4
b     1     2
"""

3、访问行列或者某一个值

①根据列名访问某一列(一维):
格式:s.列名

s=DataFrame(data=[[1,2],[3,4]],index=["b","a"],columns=["num1","num2"])
print("this is original s-- ")
print(s)

print("we are choice--")
print(s.num1)
"""
this is original s-- 
   num1  num2
b     1     2
a     3     4
we are choice num1--
b    1
a    3
Name: num1, dtype: int64
"""

②访问某一行(二维)
格式:s.iloc[n] //n为第几行的意思

③访问前n行或者后n行
格式:s.head(n) s.tail(n)

④访问一定范围的行列值,前行后列
格式:s.loc['行1':'行2','列1':'列2']

s=DataFrame(data=[[1,2],[3,4]],index=["line1","line2"],columns=["A","B"])
print("this is original s-- ")
print(s)

print("we are choice--")
print(s.loc['line1':'line2','A'])
"""
this is original s-- 
       A  B
line1  1  2
line2  3  4
we are choice--
line1    1
line2    3
Name: A, dtype: int64

"""

⑤选取m1到m2-1行,n1列到n2-1列的值

s=DataFrame(data=[[1,2],[3,4]],index=["line1","line2"],columns=["A","B"])
print("this is original s-- ")
print(s)

print("we are choice--")
print(s.iloc[0:2,0:2])
"""
this is original s-- 
       A  B
line1  1  2
line2  3  4
we are choice--
line1    1
line2    3
Name: A, dtype: int64

"""

⑥通过行数选取不同行的的值
格式:s.iloc[[m1,m2,m3],[n1,n2]] //选取m1,m2,m3行的,n1,n2列

s=DataFrame(data=[[1,2],[3,4]],index=["line1","line2"],columns=["A","B"])
print("this is original s-- ")
print(s)

print("we are choice--")
print(s.iloc[[0,1],[1]])
"""
this is original s-- 
       A  B
line1  1  2
line2  3  4
we are choice--
       B
line1  2
line2  4
"""

⑦在某列(行)筛选出适合条件的值
格式:列筛选:s[s.A>0]
全表筛选:s[s>0]

s=DataFrame(data=[[1,2],[3,4]],index=["line1","line2"],columns=["A","B"])
print("this is original s-- ")
print(s)

print("we are choice--")
print(s[s>2])
"""
this is original s-- 
       A  B
line1  1  2
line2  3  4
we are choice--
         A    B
line1  NaN  NaN
line2  3.0  4.0
"""

4、更改矩阵里面的某一个值

①使用m行n列的形式进行更改
格式:s.iloc[m,n]=xxx

s=DataFrame(data=[[1,2],[3,4]],index=["line1","line2"],columns=["A","B"])
print("this is original s-- ")
print(s)

print("we are choice--")
s.iloc[1,1]=111
print(s)
"""
this is original s-- 
       A  B
line1  1  2
line2  3  4
we are choice--
       A    B
line1  1    2
line2  3  111
"""

②使用标签来对值进行改变
格式:s.loc['m','n']=xxx

s=DataFrame(data=[[1,2],[3,4]],index=["line1","line2"],columns=["A","B"])
print("this is original s-- ")
print(s)

print("we are choice--")
s.loc['line1','B']=222
print(s)
"""
this is original s-- 
       A  B
line1  1  2
line2  3  4
we are choice--
       A    B
line1  1  222
line2  3    4
"""

5、处理丢失值

丢失的值一般就叫做NaN(not a number),处理丢失值我们一般就是丢掉这一行或者这一列
①查看矩阵里面是否包含NaN
格式:s.isnull()

s=DataFrame(data=[[1,2],[3,4]],index=["line1","line2"],columns=["A","B"])
print("this is original s-- ")
print(s,"\n")

print("we are choice--")
s.loc['line1','B']=NaN
print(s,"\n")

print("Have NaN?---")
print(s.isnull())
"""
this is original s-- 
       A  B
line1  1  2
line2  3  4 

we are choice--
       A    B
line1  1  NaN
line2  3  4.0 

Have NaN?---
           A      B
line1  False   True
line2  False  False
"""

②删除丢失值所在的行或者列
格式:s.dropna(axis=0(1),how='any'('all')
解释:axis决定删除的是行还是列;how里面的any是当一行(列)有一个NaN就删去整行(列),all是当一行(列)全是NaN才删去这一行(列)。

s=DataFrame(data=[[1,2],[3,4]],index=["line1","line2"],columns=["A","B"])
print("this is original s-- ")
print(s,"\n")

print("we are choice--")
s.loc['line1','B']=NaN
print(s,"\n")

print("Have NaN?---")
print(s.isnull(),'\n')

print("After delect NaN---")
s=s.dropna(axis=1,how='any')
print(s)
"""
this is original s-- 
       A  B
line1  1  2
line2  3  4 

we are choice--
       A    B
line1  1  NaN
line2  3  4.0 

Have NaN?---
           A      B
line1  False   True
line2  False  False 

After delect NaN---
       A
line1  1
line2  3
"""

6、介绍导出文件

①导入文件
read_csv('文件名') //导入csv文件,但还可以导入其他类型的文件可以在网上自己查查

②导出文件
to_csv('文件名') //导出csv文件,路径默认为当前文件路径

7、连接多个矩阵

作用:将n个矩阵通过纵向或者横向的方式拼接在一起

  1. concat
    ①格式:concat([df1,df2......],axis=0(1)) //纵向或者横向连接
    ②按照行索引进行排列:concat([df1,df2,df3],ignore_index=True) //在这里True代表我们使用index(行标签)进行排列
    ③多个矩阵的交集拼接在一起:concat([df1,df2],join='inner') //默认方式为outer(外连接),在这里是inner(内连接)
    在这里要注意标签,标签一致的话才能进行合并,不然会出现NaN
    例:
s1=DataFrame(data=[[1,2],[3,4]],index=["line1","line2"],columns=["A","B"])
print("this is s1-- ")
print(s1,"\n")

s2=DataFrame(data=[[5,6],[7,8]],index=["line3","line4"],columns=list('AB'))
print("this is s2---")
print(s2,"\n")
print("this is concat")
print(concat([s1,s2],axis=0))
"""
this is s1-- 
       A  B
line1  1  2
line2  3  4 

this is s2---
       A  B
line3  5  6
line4  7  8 

this is concat
       A  B
line1  1  2
line2  3  4
line3  5  6
line4  7  8
"""
  1. merge
    merge是直接通过键进行连接合并的
    格式:merge(df1,df2,on='',how='')
    在这里要注意,看键的内容以及连接方式
s1=DataFrame(data=[[1,2],[3,4]],index=["line1","line2"],columns=["A","B"])
print("this is s1-- ")
print(s1,"\n")

s2=DataFrame(data=[[5,6],[7,8]],index=["line3","line4"],columns=list('AB'))
print("this is s2---")
print(s2,"\n")
print("this is concat")
print(merge(s1,s2,on='B',how="outer"))
"""
this is s1-- 
       A  B
line1  1  2
line2  3  4 

this is s2---
       A  B
line3  5  6
line4  7  8 

this is concat
   A_x  B  A_y
0  1.0  2  NaN
1  3.0  4  NaN
2  NaN  6  5.0
3  NaN  8  7.0
"""