Python库入门(一)——numpy, pandas, matplotlib

目录

 

numpy

1. 简介

2. 导入

3. 初始化

(1)一般形式

(2)特殊形式

4. 属性

5. 基础运算

(1) 算数运算

(2)比较运算

(3)矩阵运算

(4)其他运算

6. 索引

7. 合并

8. 分割

pandas

1. 简介

(1)操作对象

(2)优势

(3)兼容格式

2. 导入

3. 选择数据

4. 设置数据

5. 处理丢失数据

6. 导入导出数据

7. 合并操作

8. 分组与聚合(Group分组与agg)

9. 数据可视化(与matlibplot结合)

10. 其他操作


numpy

 

1. 简介

(1)应用优势

快速:因为基于c语言,并且应用到了矩阵的计算,所以要比python中自带的list或者dict要快很多。

numpy类似于list,pandas类似dict,基于numpy是其升级版本。

(2)假如有matlab基础可以很容易入手。

2. 导入

import numpy as np

3. 初始化

(1)一般形式

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

dtype包括int(默认int64)、float(默认float64)等;

举例:

import numpy as np

arr = np.array([[1, 2, 3],
                [4, 5, 6]])

 

(2)特殊形式

np.zeros(shape)

np.ones(shape)

np.empty(shape)

np.arange(start, end, step).reshape(shape)  # 类似range()

np.linspace(start, end, size).reshape(shape)

import numpy as np

print(np.ones([1, 2]))

注:注意shape是一个列表,而不是两个参数。

4. 属性

np.array()创建的对象的属性包括维数(dimension)、形状(shape)、大小(size)

举例:

import numpy as np

arr = np.array([[1, 2, 3],
                [4, 5, 6]])
print(arr.ndim)  # 2
print(arr.shape)  # (2, 3) 
print(arr.size)  # 6

 

5. 基础运算

(1) 算数运算

+-*/ ** 是矩阵中的数字逐个进行运算。

(2)比较运算

> < >= <= == 返回bool矩阵

假如需要整型矩阵,那么采用以下方法转换为int类型:

https://ask.helplib.com/python/post_1052836

(3)矩阵运算

np.dot(arr1, arr2)  # arr1.*arr2

(4)其他运算

np.sum(arr, axis) np.min(arr, axis) np.max(arr, axis)

np.argmin(arr)/np.argmax(arr)  # 返回最小/最大值的索引

np.mean(arr)/np.average(arr)  # 求平均值

np.median(arr)  # 返回中位数

np.cumsum(arr)  # 累加,返回的不是一个数,而是一个矩阵,代表该位置之前的所有数值加和。

np.diff(arr)  # 累差,返回一个n*(m-1)的矩阵,每一个位置代表前一个位置数值与原矩阵该位置数值之差。

np.nonzero(arr)  # 返回非零数值的索引。结果是两个矩阵,第一个矩阵是行索引,第二个矩阵是列索引。

np.sort(arr)  # 返回矩阵每行从小到大排序后的结果。注意不是所有矩阵排序。

np.transpose(arr)  # 返回矩阵的转置矩阵。同arr.T。

np.clip(arr, min, max)  # 将矩阵中大于max的值重置为max,将矩阵中小于min的值重置为min,处于两者之间的保留原样。

6. 索引

类似于二维列表的索引。

与众不同的地方:

(1)A[1][2]可以写作A[1, 2]

(2)A[:, 2]代表的是第二列

(3)A[list(x), list(y)] 即选中(xi, yi)形成列表

tricky:

(1)想要迭代列

for col in A.T:

     print(col)

(2)想要迭代每一项

for item in A.flat:

    print(item)

注:A.flatten()返回一个一维数组,A.flat返回迭代器.

7. 合并

np.vstack(arr1, arr2)  # 垂直合并

np.hstack(arr1, arr2)  # 水平方向合并

np.concatenate((arr1, arr2), axis=0/1)  # 指定方向的合并

注:这里有一个坑,假如A是一维行向量,比如[1, 2, 3],那么A.T仍然是[1, 2, 3],因为认为现在的A是一个列表。

如果要变成一维列向量,需要A[:, np.newaxis].

8. 分割

np.split(ary, indices_or_sections, axis=0)  # 把数组分成indices_or_sections份等分的数组。

np.array_split(ary, indices_or_sections, axis=0)  # 允许数组不等分。具体划分方式如下:For an array of length l that should be split into n sections, it returns l % n sub-arrays of size l//n + 1 and the rest of size l//n

9. 拓展维度

np.repeat(a, repeats, axis=None)  # 复制数组中的元素;其中repeats是重复的次数,len(repeats)==a.shape[axis];axis是复制元素的方向

np.tile(a, reps)  # 复制整个数组进行拼接

pandas

1. 简介

(1)操作对象

Series:一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。本质上是一个NumPy的数组。没有为数据指定索引时,会自动创建一个0到N-1(N为长度)的整数型索引。基本操作参见:https://blog.csdn.net/zutsoft/article/details/51482573

Dataframe:表格型的数据结构。每列可以是不同的值类型(数值,字符串,布尔值等)。可以被看做由Series组成的大字典。基本操作参见:https://blog.csdn.net/u014281392/article/details/75331570

创建对象:

df1 = pd.Dataframe(arr, columns=[], index=[])  # index是指行索引。

df2 = pd.DataFrame({'col1':[],'col2':[]},index=[])

对象属性:

df.index

df.columns

df.values  # 返回没有索引的Numpy数组

df.dtypes  # 输出每一列的类型

操作函数:

df.describe()  # 返回一些统计学数据,只会运算数字列

df.transpose()  # 转置矩阵,相当于df.T

df.sort_index(axis=0/1, ascending=True/False)  # 按照行/列索引进行排序

df.sort_values(by=[], axis=0, ascending=True)  # 将指定行、列按照值进行排序

(2)优势

能够快速的处理电子表格格式的数据,同时具有强大的io功能,处理多种数据类型和转换

(3)兼容格式

xlsxlsx、文本文件、csv、hdf文件、xml、html

2. 导入

import pandas as pd

3. 选择数据

(1)df.loc[]  # 按照标签访问数据。所谓标签,指的是不能按照0-n-1的编号,而是按照指定的名称访问。

举例:

df = pd.DataFrame(arr, index=['row1', 'row2'], columns=['col1', 'col2', 'col3'])
print(df)
print(df.loc[:, 'col1':'col2'])

(2)df.iloc[]  # 按照位置访问数据。

df = pd.DataFrame(arr, index=['row1', 'row2'], columns=['col1', 'col2', 'col3'])
print(df)
print(df.iloc[1:2, 1:2])

(3)df.ix[]  # 混合前两种的索引方式。Python3已经弃用。

(4)df[]

访问列数据:

df = pd.DataFrame(arr, index=['row1', 'row2'], columns=['col1', 'col2', 'col3'])
print(df)
print(df.columns[1:3])
print(df[df.columns[1:3]])
print(df[['col2', 'col3']])

需要使用标签数组,具体参见最后一个。

访问行数据:

df = pd.DataFrame(arr, index=['row1', 'row2'], columns=['col1', 'col2', 'col3'])
print(df)
print(df[0:1])
print(df['row1':'row3'])
# print(df[0]) # 报错
# print(df['row1']) # 报错

可以使用标签或者位置的切片访问,不能使用数组。

4. 设置数据

(1)选择某个数据然后赋值

具体参见上述选择数据的方式,比如:

df.iloc[2, 2] = 111

(2)对于满足某种条件的数据进行赋值

df[df > 2] = 222

(3)对于不存在的列进行赋值,可以创造出新的列

df['E'] = np.nan

5. 处理丢失数据

处理丢失数据的方式有以下两种:

(1)丢掉具有NaN的行或者列

df.dropna(axis=0/1, how='all'/'any')  # 若是how为'all',那么为相应行或者列全部都是NaN时候会丢掉该行或者该列。若是how为'any',那么为相应行或者列只要包含一个及以上的NaN,就丢弃。

(2)将丢失数据部分填充为指定的值。

df.fillna(value=0)  # 将NaN的部位填充为指定的value。

(3)测试是否有丢失数据

注:使用函数np.any()检查是否存在某个值。

print(np.any(np.isnull()))

6. 导入导出数据

read_xxx()  # 读取xxx格式的文件。xxx是指数据格式。

to_xxx()  # 保存成xxx格式的文件。

以下为常用的函数以及注意点:

1. pd.read_scv(file_name, default_sep)

加载带分隔符的数据,默认分隔符为','

需要注意:

函数自动把第一行作为列属性,如果需要取消,那么设置header=None;

函数自动默认第一列为数据,如果需要设置为行属性,那么设置index_col=0(这个属性可以设置行属性列)。

7. 合并操作

1. 类似数据库的按行或者按列合并

merge

https://blog.csdn.net/zwhooo/article/details/79696558

8. 分组与聚合(Group分组与agg)

1. pandas group分组与agg聚合

https://blog.csdn.net/u012706792/article/details/80892510

注意groupby之后是一个对象,需要迭代输出,其中index是用作划分的属性的元组组合,newdf是分组之后形成的新的df。

groupby再agg之后不能够迭代,直接输出即可。

9. 数据可视化(与matlibplot结合)

(1) import头文件

import matlibplot.pyplot as plt

(2) 绘图基本操作

绘图的方式有许多个,每一种对应不同的图类型,比如'bar','hist','box','area'等等。

plt.show()  # 注意只有show之后图片才能显示出来。

常用函数一:data.plot() 绘制曲线图

如果data是Series,那么显示出一条曲线,以index为横坐标,以value为纵坐标。如果data是DataFrame,那么每一列显示出一条曲线,每一条曲线的横坐标为index,每一条曲线的纵坐标为相应列的value。

常用函数二:data.scatter()绘制散点图

df = pd.DataFrame(arr, index=['row1', 'row2'], columns=['col1', 'col2', 'col3'])
ax = df.plot.scatter(x='col1', y='col2', color='DarkBlue', label='Class1')
df.plot.scatter(x='col1', y='col3', color='LightGreen', label='Class2', ax=ax)
plt.show()

常用函数三:plt.bar()

Python——使用matplotlib绘制柱状图

10. 筛选

1. 根据列的值选取多行数据

参考链接:pandas中根据列的值选取多行数据

11. 其他操作

1. 矩阵某行归一化,即某行元素同时除以该行元素的和

假设原矩阵为x,大小为m*n

y = x.sum(1)  // 首先将x的每一列加起来,得到m*1的向量

z = x.div(y, axis=0)  // 将x的行中的每一个元素分别处以y的行元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值