01. Python 工具
02. Python 基础
03. Numpy
- Numpy 简介
- Matplotlib 基础
- Numpy 数组及其索引
- 数组类型
- 数组方法
- 数组排序
- 数组形状
- 对角线
- 数组与字符串的转换
- 数组属性方法总结
- 生成数组的函数
- 矩阵
- 一般函数
- 向量化函数
- 二元运算
- ufunc 对象
- choose 函数实现条件筛选
- 数组广播机制
- 数组读写
- 结构化数组
- 记录数组
- 内存映射
- 从 Matlab 到 Numpy
04. Scipy
05. Python 进阶
- sys 模块简介
- 与操作系统进行交互:os 模块
- CSV 文件和 csv 模块
- 正则表达式和 re 模块
- datetime 模块
- SQL 数据库
- 对象关系映射
- 函数进阶:参数传递,高阶函数,lambda 匿名函数,global 变量,递归
- 迭代器
- 生成器
- with 语句和上下文管理器
- 修饰符
- 修饰符的使用
- operator, functools, itertools, toolz, fn, funcy 模块
- 作用域
- 动态编译
06. Matplotlib
- Pyplot 教程
- 使用 style 来配置 pyplot 风格
- 处理文本(基础)
- 处理文本(数学表达式)
- 图像基础
- 注释
- 标签
- figures, subplots, axes 和 ticks 对象
- 不要迷信默认设置
- 各种绘图实例
07. 使用其他语言进行扩展
- 简介
- Python 扩展模块
- Cython:Cython 基础,将源代码转换成扩展模块
- Cython:Cython 语法,调用其他C库
- Cython:class 和 cdef class,使用 C++
- Cython:Typed memoryviews
- 生成编译注释
- ctypes
08. 面向对象编程
09. Theano 基础
- Theano 简介及其安装
- Theano 基础
- Theano 在 Windows 上的配置
- Theano 符号图结构
- Theano 配置和编译模式
- Theano 条件语句
- Theano 循环:scan(详解)
- Theano 实例:线性回归
- Theano 实例:Logistic 回归
- Theano 实例:Softmax 回归
- Theano 实例:人工神经网络
- Theano 随机数流变量
- Theano 实例:更复杂的网络
- Theano 实例:卷积神经网络
- Theano tensor 模块:基础
- Theano tensor 模块:索引
- Theano tensor 模块:操作符和逐元素操作
- Theano tensor 模块:nnet 子模块
- Theano tensor 模块:conv 子模块
10. 有趣的第三方模块
11. 有用的工具
- pprint 模块:打印 Python 对象
- pickle, cPickle 模块:序列化 Python 对象
- json 模块:处理 JSON 数据
- glob 模块:文件模式匹配
- shutil 模块:高级文件操作
- gzip, zipfile, tarfile 模块:处理压缩文件
- logging 模块:记录日志
- string 模块:字符串处理
- collections 模块:更多数据结构
- requests 模块:HTTP for Human
12. Pandas
二维数据结构:DataFrame
In [1]:
import numpy as np
import pandas as pd
DataFrame
是 pandas
中的二维数据结构,可以看成一个 Excel
中的工作表,或者一个 SQL
表,或者一个存储 Series
对象的字典。
DataFrame(data, index, columns)
中的 data
可以接受很多数据类型:
- 一个存储一维数组,字典,列表或者
Series
的字典 - 2-D 数组
- 结构或者记录数组
- 一个
Series
- 另一个
DataFrame
index
用于指定行的 label
,columns
用于指定列的 label
,如果参数不传入,那么会按照传入的内容进行设定。
从 Series 字典中构造
可以使用值为 Series
的字典进行构造:
In [2]:
d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
如果没有传入 columns
的值,那么 columns
的值默认为字典 key
,index
默认为所有 value
中 index
的并集。
In [3]:
df = pd.DataFrame(d)
df
Out[3]:
one | two | |
---|---|---|
a | 1 | 1 |
b | 2 | 2 |
c | 3 | 3 |
d | NaN | 4 |
如果指定了 index
值,index
为指定的 index
值:
In [4]:
pd.DataFrame(d, index=['d', 'b', 'a'])
Out[4]:
one | two | |
---|---|---|
d | NaN | 4 |
b | 2 | 2 |
a | 1 | 1 |
如果指定了 columns
值,会去字典中寻找,找不到的值为 NaN
:
In [5]:
pd.DataFrame(d, index=['d', 'b', 'a'], columns=['two', 'three'])
Out[5]:
two | three | |
---|---|---|
d | 4 | NaN |
b | 2 | NaN |
a | 1 | NaN |
查看 index
和 columns
:
In [6]:
df.index
Out[6]:
Index([u'a', u'b', u'c', u'd'], dtype='object')
In [7]:
df.columns
Out[7]:
Index([u'one', u'two'], dtype='object')
从 ndarray 或者 list 字典中构造
如果字典是 ndarray
或者 list
,那么它们的长度要严格保持一致:
In [8]:
d = {'one' : [1., 2., 3., 4.],
'two' : [4., 3., 2., 1.]}
index
默认为 range(n)
,其中 n
为数组长度:
In [9]:
pd.DataFrame(d)
Out[9]:
one | two | |
---|---|---|
0 | 1 | 4 |
1 | 2 | 3 |
2 | 3 | 2 |
3 | 4 | 1 |
如果传入 index
参数,那么它必须与数组等长:
In [10]:
pd.DataFrame(d, index=['a', 'b', 'c', 'd'])
Out[10]:
one | two | |
---|---|---|
a | 1 | 4 |
b | 2 | 3 |
c | 3 | 2 |
d | 4 | 1 |
从结构数组中构造
numpy
支持结构数组的构造:
In [11]:
data = np.zeros((2,), dtype=[('A', 'i4'),('B', 'f4'),('C', 'a10')])
data[:] = [(1,2.,'Hello'), (2,3.,"World")]
data
Out[11]:
array([(1, 2.0, 'Hello'), (2, 3.0, 'World')],
dtype=[('A', '<i4'), ('B', '<f4'), ('C', 'S10')])
参数处理的方式与数组字典类似:
In [12]:
pd.DataFrame(data)
Out[12]:
A | B | C | |
---|---|---|---|
0 | 1 | 2 | Hello |
1 | 2 | 3 | World |
In [13]:
pd.DataFrame(data, index=['first', 'second'])
Out[13]:
A | B | C | |
---|---|---|---|
first | 1 | 2 | Hello |
second | 2 | 3 | World |
In [14]:
pd.DataFrame(data, columns=['C', 'A', 'B'])
Out[14]:
C | A | B | |
---|---|---|---|
0 | Hello | 1 | 2 |
1 | World | 2 | 3 |
从字典列表中构造
字典中同一个键的值会被合并到同一列:
In [15]:
data2 = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
pd.DataFrame(data2)
Out[15]:
a | b | c | |
---|---|---|---|
0 | 1 | 2 | NaN |
1 | 5 | 10 | 20 |
In [16]:
pd.DataFrame(data2, index=['first', 'second'])
Out[16]:
a | b | c | |
---|---|---|---|
first | 1 | 2 | NaN |
second | 5 | 10 | 20 |
In [17]:
pd.DataFrame(data2, columns=['a', 'b'])
Out[17]:
a | b | |
---|---|---|
0 | 1 | 2 |
1 | 5 | 10 |
从 Series 中构造
相当于将 Series 二维化。
其他构造方法
DataFrame.from_dict
从现有的一个字典中构造,DataFrame.from_records
从现有的一个记录数组中构造:
In [18]:
pd.DataFrame.from_records(data, index='C')
Out[18]:
A | B | |
---|---|---|
C | ||
--- | --- | --- |
Hello | 1 | 2 |
World | 2 | 3 |
DataFrame.from_items
从字典的 item
对构造:
In [19]:
pd.DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6])])
Out[19]:
A | B | |
---|---|---|
0 | 1 | 4 |
1 | 2 | 5 |
2 | 3 | 6 |
列操作
DataFrame
可以类似于字典一样对列进行操作:
In [20]:
df["one"]
Out[20]:
a 1
b 2
c 3
d NaN
Name: one, dtype: float64
添加新列:
In [21]:
df['three'] = df['one'] * df['two']
df['flag'] = df['one'] > 2
df
Out[21]:
one | two | three | flag | |
---|---|---|---|---|
a | 1 | 1 | 1 | False |
b | 2 | 2 | 4 | False |
c | 3 | 3 | 9 | True |
d | NaN | 4 | NaN | False |
可以像字典一样删除:
In [22]:
del df["two"]
three = df.pop("three")
df
Out[22]:
one | flag | |
---|---|---|
a | 1 | False |
b | 2 | False |
c | 3 | True |
d | NaN | False |
给一行赋单一值:
In [23]:
df['foo'] = 'bar'
df
Out[23]:
one | flag | foo | |
---|---|---|---|
a | 1 | False | bar |
b | 2 | False | bar |
c | 3 | True | bar |
d | NaN | False | bar |
如果 index
不一致,那么会只保留公共的部分:
In [24]:
df['one_trunc'] = df['one'][:2]
df
Out[24]:
one | flag | foo | one_trunc | |
---|---|---|---|---|
a | 1 | False | bar | 1 |
b | 2 | False | bar | 2 |
c | 3 | True | bar | NaN |
d | NaN | False | bar | NaN |
也可以直接插入一维数组,但是数组的长度必须与 index
一致。
默认新列插入位置在最后,也可以指定位置插入:
In [25]:
df.insert(1, 'bar', df['one'])
df
Out[25]:
one | bar | flag | foo | one_trunc | |
---|---|---|---|---|---|
a | 1 | 1 | False | bar | 1 |
b | 2 | 2 | False | bar | 2 |
c | 3 | 3 | True | bar | NaN |
d | NaN | NaN | False | bar | NaN |
添加一个 test
新列:
In [28]:
df.assign(test=df["one"] + df["bar"])
Out[28]:
one | bar | flag | foo | one_trunc | test | |
---|---|---|---|---|---|---|
a | 1 | 1 | False | bar | 1 | 2 |
b | 2 | 2 | False | bar | 2 | 4 |
c | 3 | 3 | True | bar | NaN | 6 |
d | NaN | NaN | False | bar | NaN | NaN |
索引和选择
基本操作:
Operation | Syntax | Result |
---|---|---|
Select column | df[col] | Series |
Select row by label | df.loc[label] | Series |
Select row by integer location | df.iloc[loc] | Series |
Slice rows | df[5:10] | DataFrame |
Select rows by boolean vector | df[bool_vec] | DataFrame |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论