Numpy & Pandas入门

这篇博客介绍了Numpy和Pandas的基础知识,包括如何安装、Numpy的矩阵运算、索引、矩阵合并与分割,以及Pandas的Series和DataFrame操作,如数据选择、设置值、处理丢失数据及画图等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Numpy & Pandas入门

学习莫烦PYHTHON的简单学习笔记

安装

pycharm –> preference –> project Interpreter –> 左下角的加号 –> 弹出搜索框搜索 –> install Package
所有第三方模块的安装都可以通过这种办法。
版本是pycharm 2018.1.1

numpy

基础运算1

array()

将传入的参数转化为矩阵
A = np.array([[1,2,3],[5,6,7]])

属性

print(A.ndim) #维度
print(A.shape) #行数, 列数
print(A.size) #元素个数

指定数据类型

A = np.array([[1,2,3],[5,6,7]], dtype=int)
numpy有很多数据类型,可以在此指定。

创建全零矩阵

a = np.zeros((3, 4))

创建全1矩阵

a = np.ones((3, 4))

创建全空矩阵

a = np.empty((5, 6))
其中的元素都是接近于0的数。

arange()

创建连续数组,可指定步长

reshape改变数据的形状

https://blog.youkuaiyun.com/xiaoqinting2015/article/details/69936952
如果shape参数的最后边是0,代表可以自动推测出该数值大小。
np.reshape(a,(2, -1))

linspace创建等差数列

print(np.linspace(0,10,5))

基础运算2

乘法:

a * b 点乘
numpy.dot(a, b)矩阵乘法
a.dot(b)矩阵乘法
b**2b矩阵各个元素的平方,双星符号

axis参数

在sum()、min()、max()中,参数axis:
axis = 0:按列查找
axis = 1:按行查找

最小元素索引与最大元素索引
print(np.argmin(A))  
print(np.argmax(A))  

这个索引是从第一个元素开始,按照行排序,如下所示:

0 1 2 3
4 5 6 7
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]

所以这个矩阵的输出结果是:

0
11

但是还有一套索引,分为一维索引和多维索引。见下。

累加函数

a.cumsum()
numpy.cumsum(a)
原矩阵首项加到对应项的元素之和。
是一个行向量,元素个数与原矩阵元素个数相同。

累差函数

每一行,后一项与前一项之差。
比原矩阵少一列。
numpy.diff(a)

nonzero()

B = np.nonzero(A)
将矩阵A的所有非零元素提出来,将这些非零元素的行坐标作为一个行向量,非零元素的列坐标作为第二个行向量。

(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]))
#前一个是行,后一个是列
sort()

对矩阵按行排序。
也就是对每一行进行排序。行与行之间不排序。
np.sort(A)

转置

两种转置:
np.transpose(A)
A.transpose()
A.T
A.T不支持一维数组的转置。
np.transpose(A)也不支持,因为一维数组就一个轴。
四种一维数组转置的办法:

#一种一维矩阵的转置方法     
#不懂这种玩法
D = np.arange
print(D)     
F = np.transpose([D])  # []
print(F)     
#reshape转置一维向量
A = np.array([1,2,3])            
print(A.reshape(len(A), -1))     
A = np.array([1,2,3]) 
print(A[:, None])     

第二种、第三种、第四种办法(下边的newaxis)是给矩阵增加了一个轴。矩阵仍然是原来的那个矩阵,A和B仍然指向同一个地址。改变A,输出B,结果根据A的改变发生变化。
第一种办法复制了另一个矩阵出来。

A = np.array([1,2,3])    
print(A.shape)           
B = A[:, None]           
print(B.shape)           

输出:

(3,)
(3, 1)
newaxis()

axis是轴心的意思。
对于一维向量。可以利用newaxis()完成转置。

D = np.arange(30, 10, -2)                  
print(D)                                   
print(D[np.newaxis, :])  # 轴心不变,不转置        
print(D[:, np.newaxis])  # 轴心变到另一个纬度,转置    
换轴心transpose()

转置是换轴心的一种情况。
https://blog.youkuaiyun.com/u012762410/article/details/78912667

clip()

clip(Array,Array_min,Array_max)
把矩阵中比最小值小对元素变成最小值;比最大值大对变成最大值。剪掉了蛇的头和尾巴。剃头。

索引

下标都是从0开始的。

一维索引

对一维向量:
a[2]就是从左往右第三个元素。
对二维矩阵:
a[2]是第三行。
对三维矩阵:

二维索引

对二维矩阵:
二维索引定位到一个元素
可以利用切片

for循环是按行输出矩阵。
如果要按列输出矩阵,可以先将矩阵转置。

flatten

将矩阵展开成一个一维向量。
a.flatten()

flat

和flatten功能一样,但是flat是一个迭代器,需要的时候才迭代输出元素。

for item in A.flat
    print(item)   

输出:

2
3
4
5
6
7
8
9
10
11
12
13

合并矩阵

np.vstack((A, B))

将两个矩阵上下合并。
np.vstack((A, B))

np.hstack((A, B))

将两个矩阵左右合并。
np.hstack((A, B))

concatenate()

合并矩阵
concatenate((A, B), axis = 0)
axis = 0 :上下合并;
axis = 1 :左右合并;

分割矩阵

np.split()

A = np.arange(2, 14).reshape((3, 4
print(np.split(A, 4, axis=1))     

axis = 0 :横向分割
axis = 1 :纵向分割
中间的参数叫indices or sections,也就是分的块数。
只能等量分割。一个一行四列的矩阵不能纵向分割成三块。

vsplit()

np.vsplit(A, 3)
split的axis为0的情况。

hsplit()

np.hsplit(A, 2)
split的axis为1的情况。

array_split() 不等量分割矩阵

np.array_split()

A = np.arange(2, 14).reshape((3, 4))   
print(np.array_split(A, 3, axis=1))    

copy & deep copy

赋值“=”

所有变量指向一个地址。

copy

就是复制一个一模一样的矩阵出来。

NaN

not a number, 非数。
inf - inf 会引发NaN。
涉及到无穷大无穷小的运算有可能出现NaN。
有NaN参与的运算,也会引发NaN。
NaN == NaN 的结果是false。

切片

numpy 中的切片,不是复制一个子矩阵,而是将变量指向了同一片内存中的子矩阵部分。所以切片后原矩阵的相应位置发生变化,子矩阵也会变化。

而python的切片是一种浅拷贝。

张量

一维向量叫一阶张量。
二维矩阵叫二阶张量。
n维矩阵叫n阶张量。

random

https://www.jianshu.com/p/214798dd8f93

Pandas

两种数据结构:Series 和 DataFrame

Series

#pandas
p = pd.Series([1, 54, np.inf, np.nan])  
print(p)                                

#numpy                                   
n = np.array([1, 54, np.inf, np.nan])   
print(n)                                

输出:

0     1.000000
1    54.000000
2          inf
3          NaN
dtype: float64

[ 1. 54. inf nan]

和array相比,series有索引。

DataFrame

df = pd.DataFrame(np.random.randn(5,3), index = ['a', 'b', 'c', 'd', 'e'], columns=[1, 2, 3])   
print(df)                                                                           

输出:

          1         2         3
a -0.575799 -0.199744  0.218526
b -1.953569  0.694882 -0.218284
c  0.264646  0.852670 -0.798378
d  1.457002 -0.940384 -0.707806
e  1.246967  0.732388  1.863687

表格型数据结构。每一列存储的数据类型可以不同。

print(df[1])  

输出:

a    0.258160
b    0.680918
c   -1.001002
d    2.985772
e   -0.049686
Name: 1, dtype: float64

创建不给定行标签和列标签的DataFrame。

df1 = pd.DataFrame(np.arange(11, 26).reshape(5, 3))     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值