写在前面
- 在进修这篇前需要有 Python基础,可以先学习前面的 Python_tutorial,或者从其他渠道习得。
- 学习 NumPy 和 Pandas 的本质,是学习它们的 数据结构。 NumPy的 Array, Pandas中的 Series 和 DataFrame。
- 学完,会有,自己修完 《数据结构》这门课一样的感觉,“我好像都学过,遇到问题不会用”。 感觉还是得,多做(做中学)
jupyter
- 居于网页的用于交互计算的应用程序。其可被应用于全过程计算: 开发、文档编写、代码运行和结果展示
- 编程时具有语法高亮、缩进、tab补全的功能
- 可直接通过浏览器运行代码,同时在代码块下方展示运行结果。
- 可以到处不同格式,如pdf、html、py 文件
- 对代码编写说明文档或语句时,支持Markdown语法
- 其实可以直接用vscode跑ipynb文件
Numpy
学习 NumPy 所看的教程,是一个 YouTuber(Derek Banas) 的 Tutorial
Tutorial给的代码 Github: https://github.com/derekbanas/NumPy-Tutorial
笔者自己的写的ipynb文件: https://github.com/Carp2i/NumPy-Pandas-Matplotlib/tree/master/NumPy
其中 爱因斯坦求和, 克罗内克积 条件数 Crammer法则的落地 NumPy的经济学包
1 | # import |
Creating
创建列表
从 list 生成 array
1
2list_1 = [1, 2, 3, 4, 5]
np_arr_1 = np.array(list_1, dtype=np.int8)从 函数生成
这里许多函数(方法)都与 Matlab 相同
1 | np.arrange(1, 10) # 生成 [1, 10) 的自然数列 |
查看数组属性
1 | # array 的 数据类型 跟 数组size 的信息,以属性的形式保存 |
查看文件的使用方法
1 | np.random.randint? |
Slicing & Indexes
索引
索引与切片 永远重要
1 | # 同样用 list 的方式索引元素值(中括号) |
切片
1 | # 类Matlab的生成式 |
Reshape Arrays
reshape 方法
1 | arr.reshape((1, 9)) |
resize 方法
1 | np.resize(np_m_arr_1, (2,5)) |
其他变换
1 | # 二维转置 |
Stacking & Splitting
Stacking
把矩阵横着或者竖着堆起来
1 | arr1 = np.random.randit(10, size=(2,2)) |
Copying
- 直接赋值的时候不会形成复制
根据Python的机理,直接赋值,只会让两个标签指向同一内容
- 如果利用其中一个元素修改内容,另一个索引得到的结果也会修改
- 正确的copy方法
1
2arr2 = arr1.copy()
# 只是内容上的复制
Basic Math
1 | np.add(arr1, arr2) # 里面是常数也行, |
Reading from files
文件读取永远重要
1 | import pandas as pd |
Statistics Function
1 | arr1 = np.arrange(1, 6) |
Trig Functions
1 | # 特地查了一个单词 三角函数 |
Linear Algebra Function
1 | from numpy import linalg as LA |
Saving & Loader
1 | arr_15 = np.array([[1, 2], [3, 4]]) |
Comparision Function
1 | carr_1 = np.array([2, 3]) |
Pandas
虽然 莫烦老师 的课录的已经比较早了(2017),但是 NumPy 与 Pandas 这两年变化并不大。
学习课程网站: https://www.bilibili.com/video/BV1Ex411L7oT?p=12&spm_id_from=333.1007.top_right_bar_window_history.content.click
莫烦老师给的代码:https://github.com/MorvanZhou/tutorials/tree/master/numpy%26pandas
笔者的ipynb文件:
Basically Pandas is going to provide numerous tools to work with tabular data like you’d find in spreadsheets or databases and will be working with spreadsheets and databases.
And it’s widely used for data preparation cleaning as well as analysis,, and it can work with a wide variety of different types of data
1 | # import module |
Data Structure
Pandas有两个基本的数据结构,分别为 Series 与 DataFrame (注意大小写)
Series
Series 基本 数据结构,一维标签数组,能够保存任何数据类型,索引依据为标签
DataFrame
DataFrame 基本 数据结构,二维数组,是一组有序的列
- row的索引为 index
- columns的索引为 columns
- 两者一般都是字符串类型
数据结构的创建
1 | # 没有主动设置 Index 的话,默认0-1 |
上面那个例子可以看出,其实,DataFrame的创建还有Broadcast机制。纬度不够会广播填充。
常见操作
对象属性
- dtypes
注意是 dtypes(有s的1
2df.types
# 返回各个列对应的数据元素类型 - index
1
2df.index
# 返回 DataFrame Index元素类型与元素列表 - columns
1
2
3df.columns
# 返回 Columns的元素类型与元素列表
# 类型一般为 字符串 - values
1
2
3# 返回按行优先的元素值
# 除去index与columns
df.values
对象常用的方法
- .describe() 是常用的快速获取数据分布特征信息的方法
- .T 矩阵转置
- .sort 排序
调用函数 Call ur Element
索引 index
索引永远重要
1 | dates = pd.date_range('20130101', periods=6) |
切片 Slice
切片跟索引一样重要
*
1 | print(df['A'], df.A) |
- DataFrame 可以像字典一样,直接用 字符串(关键字)索引
- 可以像 Array 或者,2-dim List 一样切片
- 也可以利用 关键字 来代替传统的数字索引
Select by Label:loc
利用pandas中的loc后缀,可以利用标签来索引元素
1 | # 会把 index 为 '20130102' 的行拿出来作为 Series |
Select by position: iloc
1 | print(df.iloc[[1, 3, 5], 1:3]) |
莫烦的视频里有 DataFrame.ix 方法,可以混合使用混合索引的方法
但是在版本更新中,被删除了(deprecated
1 | # Boolean indexing |
把条件语句放入中括号中,会返回符合条件的行
Pandas 设置值
1 | dates = pd.date_range('20130101', periods=6) |
- 直接加上,不存在的列,会增添新列
- 会利用广播机制
缺失值处理
如果数据值确实,会被用 np.nan 填充缺失
缺失探测
- .isnull()方法的使用
- np.any(df.isnull()) == True 的全局监测
1
2print(df.isnull()) # 会返回各个元素依次判断的Boolean矩阵(形状,缺失值为False
print(np.any(df.isnull())==True) # 查看是否包含True值 (的确缺失,返回True
缺失值处理方法
1 | print(df.dropna(axis=0, how='all')) # how = {'any', 'all'} |
文件的读入/读出
- 读入
- read_csv
- read_excel
- …
- 导出
- to_csv
- to_excel
- …
1 | data = pd.read_csv('student.csv') |
合并
Concatenatings
同属性数据合并
1 | df1 = pd.DataFrame(np.ones((3, 4))*0, columns=['a', 'b', 'c', 'd']) |
- 默认 ignore_index = False
- 如果默认设置合并,会有相同index元素堆叠
- ignore_index = True, 相同index元素数值合并
join
1 | res = pd.concat([df1, df2], join='inner', ignore_index=False) |
merge
1 | # merging two df by key/keys. (may be used in database) |
Pandas‘ visualization
这一章的可视化部分,其实就是 pandas 的 matplotlib 函数库的调用
1 | import matplotlib.pyplot as plt |
plot data
1 | # Series |
常见plot方法
- ‘bar’
- ‘hist’
- ‘box’
- ‘kde’
- ‘scatter’
- ‘hexbin’
Scatter写法
1 | ax = data.plot.scatter(x='A', y='B', color='DarkBlue', label='Class 1') |
Matplotlib
- Post title: NumPy_Pandas_Matplotlib
- Create time: 2022-03-29 00:33:38
- Post link: Tutorial/numpy-pandas-matplotlib/
- Copyright notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.