numpy方法
表1:通用一元函数
函数 | 说明 |
---|---|
/
|
求绝对值的函数 |
|
求平方根的函数,相当于
|
|
求平方的函数,相当于
|
|
计算 e x e^x e x 的函数 |
/
/
|
对数函数(
为底 /
为底 /
为底) |
|
符号函数(
– 正数;
– 零;
– 负数) |
/
|
上取整 / 下取整 |
|
返回布尔数组,NaN对应
,非NaN对应
|
/
|
判断数值是否为无穷大的函数 |
/
/
|
三角函数 |
/
/
|
三角函数 |
/
/
|
反三角函数 |
/
/
|
反三角函数 |
/
|
四舍五入函数 |
表2:通用二元函数
函数 | 说明 |
---|---|
/
|
加法函数 / 减法函数 |
/
|
乘法函数 / 除法函数 |
/
|
整除函数 / 求模函数 |
|
检查数组
和
元素是否几乎相等 |
|
数组 x x x 的元素 x i x_i x i 和数组 y y y 的元素 y i y_i y i ,计算 x i y i x_i^{y_i} x i y i |
/
|
两两比较元素获取最大值 / 获取最大值(忽略NaN) |
/
|
两两比较元素获取最小值 / 获取最小值(忽略NaN) |
|
内积运算 |
/
|
叉积运算 / 外积运算 |
|
计算
和
的交集,返回这些元素构成的有序数组 |
|
计算
和
的并集,返回这些元素构成的有序数组 |
|
返回由判断
的元素是否在
中得到的布尔值构成的数组 |
|
计算
和
的差集,返回这些元素构成的数组 |
|
计算
和
的对称差,返回这些元素构成的数组 |
补充说明
:在二维空间内,两个向量
A=
[
a
1
a
2
]
\boldsymbol{A}=\begin{bmatrix} a_1 \\ a_2 \end{bmatrix}
A
=
[
a
1
a
2
]
和
B=
[
b
1
b
2
]
\boldsymbol{B}=\begin{bmatrix} b_1 \\ b_2 \end{bmatrix}
B
=
[
b
1
b
2
]
的叉积是这样定义的:
A×
B
=
∣
a
1
a
2
b
1
b
2
∣
=
a
1
b
2
−
a
2
b
1
\boldsymbol{A}\times \boldsymbol{B}=\begin{vmatrix} a_1 \quad a_2 \\ b_1 \quad b_2 \end{vmatrix}=a_1b_2 – a_2b_1
A
×
B
=
∣
∣
∣
∣
a
1
a
2
b
1
b
2
∣
∣
∣
∣
=
a
1
b
2
−
a
2
b
1
,其中
∣a
1
a
2
b
1
b
2
∣
\begin{vmatrix} a_1 \quad a_2 \\ b_1 \quad b_2 \end{vmatrix}
∣
∣
∣
∣
a
1
a
2
b
1
b
2
∣
∣
∣
∣
称为行列式。但是一定要注意,叉积并不等同于行列式,行列式的运算结果是一个标量,而叉积运算的结果是一个向量。如果不明白,我们可以看看三维空间两个向量,
A=
[
a
1
a
2
a
3
]
\boldsymbol{A}=\begin{bmatrix} a_1 \\ a_2 \\ a_3 \end{bmatrix}
A
=
⎣
⎡
a
1
a
2
a
3
⎦
⎤
和
B=
[
b
1
b
2
b
3
]
\boldsymbol{B}=\begin{bmatrix} b_1 \\ b_2 \\ b_3 \end{bmatrix}
B
=
⎣
⎡
b
1
b
2
b
3
⎦
⎤
的叉积是
<i
^
∣
a
2
a
3
b
2
b
3
∣
,
−
j
^
∣
a
1
a
3
b
1
b
3
∣
,
k
^
∣
a
1
a
2
b
1
b
2
∣
>
\left< \hat{i} \begin{vmatrix} a_2 \quad a_3 \\ b_2 \quad b_3 \end{vmatrix}, -\hat{j} \begin{vmatrix} a_1 \quad a_3 \\ b_1 \quad b_3 \end{vmatrix}, \hat{k} \begin{vmatrix} a_1 \quad a_2 \\ b_1 \quad b_2 \end{vmatrix} \right>
⟨
i
^
∣
∣
∣
∣
a
2
a
3
b
2
b
3
∣
∣
∣
∣
,
−
j
^
∣
∣
∣
∣
a
1
a
3
b
1
b
3
∣
∣
∣
∣
,
k
^
∣
∣
∣
∣
a
1
a
2
b
1
b
2
∣
∣
∣
∣
⟩
,其中
i^
,
j
^
,
k
^
\hat{i}, \hat{j}, \hat{k}
i
^
,
j
^
,
k
^
代表每个维度的单位向量。
其他常用函数
表3:NumPy其他常用函数
函数 | 说明 |
---|---|
|
去除数组重复元素,返回唯一元素构成的有序数组 |
|
返回拷贝数组得到的数组 |
|
返回数组元素排序后的拷贝 |
/
/
|
将数组拆成若干个子数组 |
/
/
|
将多个数组堆叠成新数组 |
|
沿着指定的轴连接多个数组构成新数组 |
/
|
向数组末尾追加元素 / 在数组指定位置插入元素 |
|
找出数组中非0元素的位置 |
/
/
|
按照指定的条件从数组中抽取或处理数组元素 |
|
沿指定的轴翻转数组中的元素 |
|
通过迭代器创建数组对象 |
|
通过读取文件和正则表达式解析获取数据创建数组对象 |
/
|
通过对元素的重复来创建新数组 |
|
沿指定轴对数组元素进行移位 |
|
重新调整数组的大小 |
/
|
将数组中满足条件的元素/指定的元素替换为指定的值 |
|
沿指定的轴计算极差(最大值与最小值的差) |
|
沿指定轴计算中位数 |
|
用选定的元素对数组进行一次划分并返回划分后的数组 |
提示
:上面的
resize
函数和
ndarray
对象的
resize
方法是有区别的,
resize
函数在调整数组大小时会重复数组中的元素作为填补多出来的元素的值,而
ndarry
对象的
resize
方法是用0来填补多出来的元素。这些小细节不清楚暂时也不要紧,但是如果用到对应的功能了就要引起注意。
numpy矩阵对象的属性。
属性 | 说明 |
---|---|
|
获取矩阵对象对应的
对象 |
|
获取矩阵对象对应的扁平化后的
对象 |
|
可逆矩阵的逆矩阵 |
|
矩阵的转置 |
|
矩阵的共轭转置 |
|
矩阵的形状 |
|
矩阵元素的个数 |
NumPy的线性代数模块
函数 | 说明 |
---|---|
|
以一维数组的形式返回方阵的对角线元素或将一维数组转换为方阵(非对角元素元素为0) |
|
向量的点积 |
|
数组的点积 |
|
数组的内积 |
|
数组的叉积 |
|
计算对角线元素的和 |
|
求模(范数)运算 |
|
计算行列式的值(在方阵上计算会得到一个标量) |
|
计算矩阵的秩 |
|
计算矩阵的特征值(eigenvalue)和特征向量(eigenvector) |
|
计算非奇异矩阵( n n n 阶方阵)的逆矩阵 |
|
计算矩阵的摩尔-彭若斯(Moore-Penrose)广义逆 |
|
QR分解(把矩阵分解成一个正交矩阵与一个上三角矩阵的积) |
|
计算奇异值分解(singular value decomposition) |
|
解线性方程组 A x = b \boldsymbol{A}\boldsymbol{x}=\boldsymbol{b} A x = b ,其中 A \boldsymbol{A} A 是一个方阵 |
|
计算 A x = b \boldsymbol{A}\boldsymbol{x}=\boldsymbol{b} A x = b 的最小二乘解 |
Pandas属性和方法
Series对象的常用属性如下表所示。
属性 | 说明 |
---|---|
/
|
返回
对象的数据类型 |
|
判断
对象中有没有空值 |
/
|
通过索引访问
对象中的单个值 |
/
|
通过一组索引访问
对象中的一组值 |
|
返回
对象的索引 |
|
判断
对象中的数据是否单调 |
|
判断
对象中的数据是否单调递增 |
|
判断
对象中的数据是否单调递减 |
|
判断
对象中的数据是否独一无二 |
|
返回
对象中元素的个数 |
|
以
的方式返回
对象中的值 |
提示
:因为
describe()
返回的也是一个
Series
对象,所以也可以用
ser2.describe()['mean']
来获取平均值。
如果
Series
对象有重复的值,我们可以使用
unique()
方法获得去重之后的
Series
对象;可以使用
nunique()
方法统计不重复值的数量;如果想要统计每个值重复的次数,可以使用
value_counts()
方法,这个方法会返回一个
Series
对象,它的索引就是原来的
Series
对象中的值,而每个值出现的次数就是返回的
Series
对象中的数据,在默认情况下会按照出现次数做降序排列。
读取 CSV 文件创建
DataFrame
对象
DataFrame
可以通过
pandas
模块的
read_csv
函数来读取 CSV 文件,
read_csv
函数的参数非常多,下面接受几个比较重要的参数。
-
sep
/
delimiter
:分隔符,默认是
,
。 -
header
:表头(列索引)的位置,默认值是
infer
,用第一行的内容作为表头(列索引)。 -
index_col
:用作行索引(标签)的列。 -
usecols
:需要加载的列,可以使用序号或者列名。 -
true_values
/
false_values
:哪些值被视为布尔值
True
/
False
。 -
skiprows
:通过行号、索引或函数指定需要跳过的行。 -
skipfooter
:要跳过的末尾行数。 -
nrows
:需要读取的行数。 -
na_values
:哪些值被视为空值。
读取Excel文件创建
DataFrame
对象
DataFrame
可以通过
pandas
模块的
read_excel
函数来读取 Exce l文件,该函数与上面的
read_csv
非常相近,多了一个
sheet_name
参数来指定数据表的名称,但是不同于 CSV 文件,没有
sep
或
delimiter
这样的参数。下面的代码中,
read_excel
函数的
skiprows
参数是一个 Lambda 函数,通过该 Lambda 函数指定只读取 Excel 文件的表头和其中10%的数据,跳过其他的数据。
通过SQL从数据库读取数据创建
DataFrame
对象
DataFrame
pandas
模块的
read_sql
函数可以通过 SQL 语句从数据库中读取数据创建
DataFrame
对象,该函数的第二个参数代表了需要连接的数据库。对于 MySQL 数据库,我们可以通过
pymysql
或
mysqlclient
来创建数据库连接,得到一个
Connection
对象,而这个对象就是
read_sql
函数需要的第二个参数。
提示
:执行上面的代码需要先安装
pymysql
库,如果尚未安装,可以先在 Notebook 的单元格中先执行
!pip install pymysql
,然后再运行上面的代码。上面的代码连接的是我部署在阿里云上的 MySQL 数据库,公网 IP 地址:
数据库ip
,用户名:
用户名称
,密码:
数据库密码
,数据库:
数据库名称
,表名:
表名
,字符集:
utf8mb4
,大家可以使用这个数据库,但是不要进行恶意的访问。
说明
:在数据库中
mgr
和
comm
两个列的数据类型是
int
,但是因为有缺失值(空值),读取到
DataFrame
之后,列的数据类型变成了
float
,因为我们通常会用
float
类型的
NaN
来表示空值。
DataFrame
对象的属性如下表所示。
属性名 | 说明 |
---|---|
/
|
通过标签获取
中的单个值。 |
|
对象列的索引 |
|
对象每一列的数据类型 |
|
对象是否为空 |
/
|
通过标签获取
中的一组值。 |
|
对象的维度 |
|
对象的形状(行数和列数) |
|
对象中元素的个数 |
|
对象的数据对应的二维数组 |
关于
DataFrame
的方法,首先需要了解的是
info()
方法,它可以帮助我们了解
DataFrame
的相关信息。
重塑数据
有的时候,我们做数据分析需要的原始数据可能并不是来自一个地方,就像上面的例子中,我们从关系型数据库中读取了三张表,得到了三个
DataFrame
对象,但实际工作可能需要我们把他们的数据整合到一起。例如:
df
和
df2
其实都是员工的数据,而且数据结构完全一致,我们可以使用
pandas
提供的
concat
函数实现两个或多个
DataFrame
的数据拼接,代码如下所示。
数据清洗
通常,我们从 Excel、CSV 或数据库中获取到的数据并不是非常完美的,里面可能因为系统或人为的原因混入了重复值或异常值,也可能在某些字段上存在缺失值;再者,
DataFrame
中的数据也可能存在格式不统一、量纲不统一等各种问题。因此,在开始数据分析之前,对数据进行清洗就显得特别重要。
缺失值
可以使用
DataFrame
对象的
isnull
或
isna
方法来找出数据表中的缺失值。