本文的目的在于教给 现充
我一点人生的经验,介绍一些 Jupyter Notebook 的良好体验。
知识准备:具有一定的人生经验
-1. Jupyter Pandas 是什么
Jupyter
一个在线 Python
编程环境,每行的代码在敲击 Shift + Enter
后单独执行,便于初学者快速掌握编程语言。
Jupyter 可以完美利用 Python 丰富的数据分析和科学计算的工具库,实现一些非大数据的分析计算需求。
Pandas
用于操作行列数据,方便地实现各种数据分析的形式。
Jupyter 的限制
由于 Python 本身的限制,如果需要计算的数据太大,而无法一次载入内存,则需要分块导入数据,并对查询做相应的修改。
0. 安装本地环境
(现充请跳过本节,直接访问线上地址,点击 Welcome to Python.ipynb
)
在命令行中输入:
pip install jupyter
pip install pandas
pip install matplotlib
cd到指定目录,启动:
1. 加载工具库
在 Jupyter Notebook 中,Pandas 是操作数据的工具,matplotlib 是执行作图的工具。
在 Cell 中输入并执行:
import pandas as pd
import matplotlib.pyplot as plt
2. 读取数据文件或数据库
在 Cell 中输入并执行:
df = pd.read_csv('./data.csv', index_col='id')
由于在线环境无法创建文件,也可以执行以下语句创建一个 DataFrame
:
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
index_col
的作用是索引,是为了高效查询建立的特殊数据结构,简单说(不准确)是黄页
3. 想象这是Excel
现在想象你手边有Excel(当然你也可以真的开一个)显示如下表格:
date(索引) |
A |
B |
C |
D |
2013-01-01 |
0.469112 |
-0.282863 |
-1.509059 |
-1.135632 |
2013-01-02 |
1.212112 |
-0.173215 |
0.119209 |
-1.044236 |
2013-01-03 |
-0.861849 |
-2.104569 |
-0.494929 |
1.071804 |
2013-01-04 |
0.721555 |
-0.706771 |
-1.039575 |
0.271860 |
2013-01-05 |
-0.424972 |
0.567020 |
0.276232 |
-1.087401 |
2013-01-06 |
-0.673690 |
0.113648 |
-1.478427 |
0.524988 |
- 行的选取
在 Cell 中输入并执行:
选择第0行至第3行,结果如灰色区域所示:
date(索引) |
A |
B |
C |
D |
2013-01-01 |
0.469112 |
-0.282863 |
-1.509059 |
-1.135632 |
2013-01-02 |
1.212112 |
-0.173215 |
0.119209 |
-1.044236 |
2013-01-03 |
-0.861849 |
-2.104569 |
-0.494929 |
1.071804 |
2013-01-04 |
0.721555 |
-0.706771 |
-1.039575 |
0.271860 |
2013-01-05 |
-0.424972 |
0.567020 |
0.276232 |
-1.087401 |
2013-01-06 |
-0.673690 |
0.113648 |
-1.478427 |
0.524988 |
2.列的选取
cols = df[['A', 'B', 'C']]
选择列A,B,C,结果如灰色区域所示:
date(索引) |
A |
B |
C |
D |
2013-01-01 |
0.469112 |
-0.282863 |
-1.509059 |
-1.135632 |
2013-01-02 |
1.212112 |
-0.173215 |
0.119209 |
-1.044236 |
2013-01-03 |
-0.861849 |
-2.104569 |
-0.494929 |
1.071804 |
2013-01-04 |
0.721555 |
-0.706771 |
-1.039575 |
0.271860 |
2013-01-05 |
-0.424972 |
0.567020 |
0.276232 |
-1.087401 |
2013-01-06 |
-0.673690 |
0.113648 |
-1.478427 |
0.524988 |
3.块的选取
df.loc['20130102':'20130104',['A','B']]
选择行和列组成的数据块,结果如灰色区域所示:
date(索引) |
A |
B |
C |
D |
2013-01-01 |
0.469112 |
-0.282863 |
-1.509059 |
-1.135632 |
2013-01-02 |
1.212112 |
-0.173215 |
0.119209 |
-1.044236 |
2013-01-03 |
-0.861849 |
-2.104569 |
-0.494929 |
1.071804 |
2013-01-04 |
0.721555 |
-0.706771 |
-1.039575 |
0.271860 |
2013-01-05 |
-0.424972 |
0.567020 |
0.276232 |
-1.087401 |
2013-01-06 |
-0.673690 |
0.113648 |
-1.478427 |
0.524988 |
4. 操作行和块
Pandas 中的基本数据结构有二,Series
和 Dataframe
。
Series
用来创建行,也可以理解为一维数组。
Dataframe
用来创建块,或称为矩阵,表格。
创建一个数组[1,1,2,3,5]:
s = pd.Series([1,1,2,3,5])
创建一个 6x4
的表格块,单元格内容为随机数列名为 A,B,C,D。
pd.DataFrame(np.random.randn(6,4), columns=list('ABCD'))
从已有的列创建一个新的列
df['sumAB'] = pd.Series(df['A'] + df['B'], index=df.index)
df['10A'] = pd.Series(df['A']*10, index=df.index)
df['A'] + df['B']
表示两列对应单元格的相加
df['A']*10
表示列A每个单元格 *10
运算后df的值如下:
date(索引) |
A |
B |
C |
D |
sumAB |
10A |
2013-01-01 |
0.469112 |
-0.282863 |
-1.509059 |
-1.135632 |
0.186249 |
4.69112 |
2013-01-02 |
1.212112 |
-0.173215 |
0.119209 |
-1.044236 |
1.038897 |
12.12112 |
2013-01-03 |
-0.861849 |
-2.104569 |
-0.494929 |
1.071804 |
-2.966418 |
-8.61849 |
2013-01-04 |
0.721555 |
-0.706771 |
-1.039575 |
0.271860 |
0.014784 |
7.21555 |
2013-01-05 |
-0.424972 |
0.567020 |
0.276232 |
-1.087401 |
0.142048 |
-4.24972 |
2013-01-06 |
-0.673690 |
0.113648 |
-1.478427 |
0.524988 |
-0.560042 |
-6.73690 |
根据条件过滤行
在方括号中加入判断条件来过滤行,条件必需返回 True
或者 False
df[(df.index >= '2013-01-01') & (df.index <= '2013-01-03')]
df[df['A'] > 0]
窥视数据
为了快速了解数据的结构,一些值得掌握的指令如下: