Numpy & Pandas

本文主要记录一些Numpy和Pandas的方法

Numpy

1.惯用写法:

1
import numpy as np

2.从列表生成一个矩阵:

1
2
3
import numpy as np

print(np.array([[0,1,2,3,4,5],[6,7,8,9,10,11]]))

创建矩阵

3.创建全0或全1矩阵:

1
2
3
4
import numpy as np

print(np.zeros((3,4)))
print(np.ones((5,5)))

0/1矩阵

4.通过.shape得到当前矩阵的尺寸,通过.reshape()将当前矩阵转置

1
2
3
4
5
import numpy as np

print(np.zeros((3,4)))
print(np.zeros((3,4)).shape)
print(np.zeros((3,4)).reshape(4,3))

获取矩阵的尺寸,转置

5.使用arange()创建递增/递减的数列

1
2
3
import numpy as np

print(np.arange(1,10))

arange()

6.使用linspace()获取一个等分的区间序列,第三个参数是输出样本的总数

1
2
3
import numpy as np

print(np.linspace(1,100,10))

linspace()

7.通过random.rand()生成随机数组

1
2
3
import numpy as np

print(np.random.rand(3,4))

随机数组

8.Numpy中默认的数据类型为64位浮点数,可以在创建数组时使用dtype参数指定其他的数据类型

1
2
3
import numpy as np

print(np.ones((3,4),dtype=np.float32))

numpy数据类型

9.对先有的数组,也可以使用astype()来更改数据类型

1
2
3
4
5
6
import numpy as np

array0=np.ones((3,4),dtype=np.float32)
array1=array0.astype(int)

print(array0,array1)

数据类型转换

10.Numpy数组可以直接与一个数进行运算,这个过程称之为广播;两个不同尺寸的数组也可以直接进行运算,这期间numpy会自动将两个数组扩展到相同的尺寸

1
2
3
4
5
6
7
8
9
10
import numpy as np

array0=np.array([1,2,3])
array1=np.array([4,5,6])
array2=np.array([[7],
[8],
[9]])

print(array0*10)
print(array1+array2)

numpy的广播与numpy中不同尺寸数组的运算

11.Numpy中两个相同尺寸的数组可以直接进行四则运算

1
2
3
4
5
6
7
8
9
import numpy as np

array0=np.array([1,2,3])
array1=np.array([4,5,6])
array2=np.array([7,8,9])

print(array0+array1)
print(array0*array2)
print(array2/array0)

numpy四则运算

12.使用np.dot()函数来将两个数组元素进行向量的点乘运算,或使用 @ 符号将两个矩阵进行矩阵的乘法

1
2
3
4
5
6
7
8
9
10
11
import numpy as np

array0=np.array([1,2,3])
array1=np.array([4,5,6])
array2=np.array([[7,8],
[9,10]])
array3=np.array([[11,12],
[13,14]])

print(array0.dot(array1))
print(array2 @ array3)

向量积和矩阵的乘法

13.基本初等运算

还可以使用:

· np.sin()/np.cos()/np.tan()进行三角函数运算

· np.sqrt()进行开方运算

· np.log()进行对数运算

· np.power()进行指数运算

1
2
3
4
5
6
7
8
import numpy as np

array0=np.array([1,2,3])

print(np.sin(array0),np.cos(array0),np.tan(array0))
print(np.sqrt(array0))
print(np.log(array0))
print(np.power(array0,2))

基本初等运算

14.argmin()argmax()可以返回数组中最小/最大元素的索引

1
2
3
4
5
6
import numpy as np

array0=np.array([1,2,3])

print(array0.argmin())
print(array0.argmax())

最小和最大元素

15.统计运算

使用:

· sum()获取所有元素和

· mean()获取数据平均数

· np.median()获取数据中位数

· var()获取数据方差

· std()获取数据标准差

其中可以通过修改参数axis的值来获取对应矩阵的行或列,也可以使用类似Python数组的表示或列表的切片来获取对应的元素/矩阵对应的行列

1
2
3
4
5
6
7
8
9
10
11
import numpy as np

array0=np.array([[1,2,3,4,5,6,7,8,9,10],
[11,12,13,14,15,16,17,18,19,20],
[21,22,23,24,25,26,27,28,29,30]])

print(array0[1:2,0:5].sum(axis=0),array0.sum(axis=1))
print(array0[1,:].mean(),array0.mean(axis=0))
print(np.median(array0[2,:]),np.median(array0,axis=1))
print(array0[:,5:-1].var(),array0.var(axis=0))
print(array0.std(axis=0),array0.std(axis=1))

统计运算

16.筛选数据

可以通过如下方式进行数据筛选,如在方括号中输入array0>6则返回所有>6的数据。也可以配合逻辑运算符一起使用

1
2
3
4
5
6
7
import numpy as np

array0=np.array([[1,2,3,4,5,6,7,8,9,10],
[11,12,13,14,15,16,17,18,19,20],
[21,22,23,24,25,26,27,28,29,30]])

print(array0[array0>6])

筛选数据

17.Numpy图片处理

通常对于灰度图片,可以将其当作二维数组处理,数组中的每个元素代表对应像素的亮度。对于RGB彩色图片,可以用三维数组处理,第三维分别存储像素点对应的R/G/B值

使用pillow库打开一张图片

1
2
3
4
from PIL import Image

img=Image.open('kite.png')
img.show()

1
2
3
4
from PIL import Image

img=Image.open('kite.png')
img.show()

smile风筝图像
flower图像
将图像转化为numpy数组形式,下面以flower.png为例

1
2
3
4
5
6
7
import numpy as np
from PIL import Image

img=Image.open('flower.png')
img=np.array(img)

print(img.shape)

图像转化为数组
可以看到这个图像共有3456行,5184列像素,每个像素包括RGB三个颜色的分量

通过类似列表切片的方式提取出图像的所有绿色分量

1
2
3
4
5
6
7
8
import numpy as np
from PIL import Image

img=Image.open('flower.png')
img=np.array(img)
img_red=img[:,:,1]

Image.fromarray(img_red).show()

提取绿色分量后的图像
也可以对图像进行裁剪

1
2
3
4
5
6
7
8
import numpy as np
from PIL import Image

img=Image.open('flower.png')
img=np.array(img)
img_cut=img[1000:2500,900:3200,:]

Image.fromarray(img_cut).show()

图像裁剪
通过广播的方式做图像增强,常用作机器学习领域

1
2
3
4
5
6
7
import numpy as np
from PIL import Image

img=Image.open('flower.png')
img=np.array(img)*15

Image.fromarray(img).show()

图像增强

Pandas

1.惯用写法:

1
import pandas as pd

2.创建pandas序列

1
2
3
4
import numpy as np
import pandas as pd

print(pd.Series([1,2,3,np.nan,5,6]))

pandas序列创建

3.创建pandas数据结构DataFrame

可以通过一般形式创建或以一个类似于字典的形式创建pandas DataFrame

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np
import pandas as pd

dates=pd.date_range('20220301',periods=5)
df0=pd.DataFrame(np.random.randn(5,10),index=dates,columns=['A','B','C','D','E','F','G','H','I','I'])
df1=pd.DataFrame({'A':1.,
'B':pd.Timestamp('20220301'),
'C':pd.Series(1,index=list(range(4)),dtype='float32'),
'D':np.array([3]*4,dtype='int32'),
'E':pd.Categorical(["test","train","test","train"]),
'F':'foo'})

print(df0)
print(df1)

pandas DataFrame
也可以直接得出DataFrame的一些属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
import pandas as pd

dates=pd.date_range('20220301',periods=5)
df0=pd.DataFrame(np.random.randn(5,10),index=dates,columns=['A','B','C','D','E','F','G','H','I','I'])
df1=pd.DataFrame({'A':1.,
'B':pd.Timestamp('20220301'),
'C':pd.Series(1,index=list(range(4)),dtype='float32'),
'D':np.array([3]*4,dtype='int32'),
'E':pd.Categorical(["test","train","test","train"]),
'F':'foo'})

print(df0.columns)
print(df1.values)
print(df1.describe)

DataFrame属性

4.获取DataFrame元素

下列print()中的两种方式均可:

1
2
3
4
5
6
7
8
9
10
11
import numpy as np
import pandas as pd

df1=pd.DataFrame({'A':1.,
'B':pd.Timestamp('20220301'),
'C':pd.Series(1,index=list(range(4)),dtype='float32'),
'D':np.array([3]*4,dtype='int32'),
'E':pd.Categorical(["test","train","test","train"]),
'F':'foo'})

print(df1.A,df1['A'])

获取DataFrame元素1
也可以通过切片索引的方式来获取

1
2
3
4
5
6
7
8
9
10
11
import numpy as np
import pandas as pd

df1=pd.DataFrame({'A':1.,
'B':pd.Timestamp('20220301'),
'C':pd.Series(1,index=list(range(4)),dtype='float32'),
'D':np.array([3]*4,dtype='int32'),
'E':pd.Categorical(["test","train","test","train"]),
'F':'foo'})

print(df1[1:4])

获取DataFrame元素2
还可以通过标签来获取

1
2
3
4
5
6
7
import numpy as np
import pandas as pd

dates=pd.date_range('20220301',periods=6)
df0=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])

print(df0.loc['20220302'],['A','B'])

获取DataFrame元素3
通过位置来获取

1
2
3
4
5
6
7
8
import numpy as np
import pandas as pd

dates=pd.date_range('20220301',periods=6)
df0=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])

print(df0.iloc[[1,3,5],[1,3]])
![获取DataFrame元素4](/7.png)

4.修改DataFrame中的值

可以通过之前查找标签和位置的方式对值进行修改:

1
2
3
4
5
6
7
8
9
10
import numpy as np
import pandas as pd

dates=pd.date_range('20220301',periods=6)
df0=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])

df0.loc['20220304','B']=9999
df0.iloc[2,3]=1000

print(df0)

修改DataFrame数据1
也可以通过逻辑表达式修改数据:

1
2
3
4
5
6
7
8
9
import numpy as np
import pandas as pd

dates=pd.date_range('20220301',periods=6)
df0=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])

df0[df0.B>10]=100

print(df0)

修改DataFrame数据2

5.删除缺失数据

可以通过dropna()来清除缺失数据,其中参数how的值为‘any’表示有缺失即丢弃,值为‘all’则表示全部缺失后才丢弃

1
2
3
4
5
6
7
8
9
import numpy as np
import pandas as pd

dates=pd.date_range('20220301',periods=6)
df0=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])
df0.iloc[0,1]=np.nan
df0.iloc[2,3]=np.nan

print(df0.dropna(axis=0,how='any'))

删除缺失数据

6.填补缺失数据

可以通过fillna()来填补缺失数据

1
2
3
4
5
6
7
8
9
import numpy as np
import pandas as pd

dates=pd.date_range('20220301',periods=6)
df0=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])
df0.iloc[0,1]=np.nan
df0.iloc[2,3]=np.nan

print(df0.fillna(value=0))

填补缺失数据

7.审查缺失数据

通过isnull()来检查数据是否为空,检查结果会返回布尔值

1
2
3
4
5
6
7
8
9
import numpy as np
import pandas as pd

dates=pd.date_range('20220301',periods=6)
df0=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])
df0.iloc[0,1]=np.nan
df0.iloc[2,3]=np.nan

print(df0.isnull())

检查缺失数据
如果要检查数据中是否存在丢失数据,可以这样

1
2
3
4
5
6
7
8
9
import numpy as np
import pandas as pd

dates=pd.date_range('20220301',periods=6)
df0=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])
df0.iloc[0,1]=np.nan
df0.iloc[2,3]=np.nan

print(np.any(df0.isnull()==True))

一旦返回结果为True,则意味着数据中有缺失

8.Pandas的数据导入导出

通常使用内置函数如:

· read_csv():打开csv文件

· read_excel():打开excel文件

· read_json():打开json文件

· read_html():打开html文件

· read_pickle():打开pickle文件

· read_sql():打开数据库文件

类似的,要存储为对应的文件,可以使用:

· to_csv():存储为csv文件

· to_excel():存储为excel文件

· to_json():存储为json文件

· to_html():存储为html文件

· to_pickle():存储为pickle文件

· to_sql():存储为数据库文件

9.Pandas数据合并

可以使用pd.concat()来合并pandas的DataFrame

1
2
3
4
5
6
7
8
9
10
import numpy as np
import pandas as pd

df0=pd.DataFrame(np.ones((3,4))*0,columns=['A','B','C','D'])
df1=pd.DataFrame(np.ones((3,4))*1,columns=['A','B','C','D'])
df2=pd.DataFrame(np.ones((3,4))*2,columns=['A','B','C','D'])

print(df1,'\n',df1,'\n',df2)

print(pd.concat([df0,df1,df2],axis=0))

数据合并1
如果两组数据的索引、类型不同,也可以进一步将它们合并

其中join‘inner’为裁剪模式,默认‘out’为合并模式,会为两者间缺失的部分赋空值

ignore_index的值赋为True可以重置索引

1
2
3
4
5
6
7
8
9
import numpy as np
import pandas as pd

df0=pd.DataFrame(np.ones((3,4))*0,columns=['A','B','C','D'],index=[1,2,3])
df1=pd.DataFrame(np.ones((3,4))*1,columns=['B','C','D','E'],index=[2,3,5])

print(df1,'\n',df1)

print(pd.concat([df0,df1],join='inner',ignore_index=True))

数据合并2

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2024 青域 All Rights Reserved.

UV : | PV :