Pandas 简介

Pandas 库基于 NumPy 构建,为 Python 编程语言提供易于使用的数据结构和数据分析工具。

使用以下约定导入 Pandas
1  | import pandas as pd  | 
帮助
1  | help(pd.Series.loc)  | 
Pandas 数据结构
序列(Series)
能够保存任何数据类型的一维标记数组
1  | s = pd.Series([1, 3, 5, 7], index=['天', '地', '玄', '黄'])  | 
1  | # 左侧一列为索引  | 
天    1
地    3
玄    5
黄    7
dtype: int64
数据框(DataFrame)
不同类型列的二维标记数据结构,类似 Excel 表格
上面一行为列名
左侧一列为索引
| - | 姓 | 名 | 民族 | 姓别 | 年龄 | 
|---|---|---|---|---|---|
| 1 | 贾 | 小武 | 汉 | 男 | 3 | 
| 2 | 贾 | 小久 | 汉 | 男 | 1 | 
| 3 | 张 | 小鸭 | 汉 | 女 | - | 
1  | data = {'姓': ['贾', '贾', '张'],  | 
1  | data  | 
{‘姓’: [‘贾’, ‘贾’, ‘张’],
 ‘名’: [‘小武’, ‘小久’, ‘小鸭́’],
 ‘民族’: [‘汉’, ‘汉’, ‘汉’],
 ‘年龄’: [3, 1, None]}
1  | df = pd.DataFrame(data, columns=['姓', '名', '年龄'])  | 
1  | df  | 
| - | 姓 | 名 | 民族 | 姓别 | 年龄 | 
|---|---|---|---|---|---|
| 1 | 贾 | 小武 | 汉 | 男 | 3 | 
| 2 | 贾 | 小久 | 汉 | 男 | 1 | 
| 3 | 张 | 小鸭 | 汉 | 女 | - | 
文件 I / O
读写 CSV
1  | pd.read_csv('file.csv', header=None, nrows=5)  | 
读写 Excel
1  | pd.read_excel('file.xlsx')  | 
读取数据库
1  | from sqlalchemy import create_engine  | 
read_sql() 是 read_sql_table() 和 read_sql_query() 的便捷包装器
1  | pd.to_sql('myDf', engine)  | 
选择
获取
1  | # 获取 1 个数据  | 
1
1  | # 获取 DataFrame 的子集  | 
选择,布尔索引 & 设置
位置
按行和列选择单个值
1  | df.iloc[[0], [1]]  | 
1  | df.iat[0, 1]  | 
‘小武’
标签
按行和列标签选择单个值
1  | df.loc[0, '姓']  | 
‘贾’
1  | df.at[0, '姓']  | 
‘贾’
布尔索引
1  | s[~(s > 1)]  | 
天    1
dtype: int64
1  | s[(s < -1) | (s > 2)]  | 
地    3
玄    5
黄    7
dtype: int64
1  | df[df['年龄']>1]  | 
设置
将序列 s 的索引 ‘宇’ 设置为 9
1  | s['宇'] = 9  | 
天    1
地    3
玄    5
黄    7
宇    9
dtype: int64
删除(dropping)
从行中删除值(axis = 0)
1  | s.drop(['天', '地'])  | 
玄    5
黄    7
宇    9
dtype: int64
从列中删除值(axis = 1)
1  | df.drop('姓', axis=1)  | 
排序和排名
按轴标签排序
1  | df.sort_index()  | 
按轴的值排序
1  | df.sort_values(by='年龄')  | 
从小到大排序的下标
1  | df.rank()  | 
检索 Series / DataFrame 信息
基本信息
1  | df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],  | 
(行,列)
1  | df.shape  | 
(3, 2)
描述索引
1  | df.index  | 
Index([‘cobra’, ‘viper’, ‘sidewinder’], dtype=’object’)
描述 DataFrame 列信息
1  | df.columns  | 
Index([‘max_speed’, ‘shield’], dtype=’object’)
DataFrame 信息
1  | df.info()  | 
非 NA 值的数量
1  | df.count()  | 
max_speed    3
shield       3
dtype: int64
摘要
总和
1  | df.sum()  | 
max_speed    12
shield       15
dtype: int64
累积值
1  | df.cumsum()  | 
最小值
1  | df.min()  | 
max_speed    1
shield       2
dtype: int64
最大值
1  | df.max()  | 
max_speed    7
shield       8
dtype: int64
最小索引值
1  | df.idxmin()  | 
max_speed    cobra
shield       cobra
dtype: object
最大索引值
1  | df.idxmax()  | 
max_speed    sidewinder
shield       sidewinder
dtype: object
摘要统计
1  | df.describe()  | 
max_speed    4.0
shield       5.0
dtype: float64
中位数
1  | df.median()  | 
max_speed    4.0
shield       5.0
dtype: float64
应用函数
1  | f = lambda x: x*2  | 
应用函数
1  | df.apply(f)  | 
按元素应用函数
1  | df.applymap(f)  | 
数据对齐
内部数据对齐
值 NA 在不重叠的索引中引入
1  | s3 = pd.Series([7, -2, 3], index=['玄', '黄', '宇'])  | 
1  | s + s3  | 
地     NaN
天     NaN
宇    12.0
玄    12.0
黄     5.0
dtype: float64
填充方法的算术运算
借助填充方法自行完成内部数据对齐
1  | s.add(s3, fill_value=0)  | 
地     3.0
天     1.0
宇    12.0
玄    12.0
黄     5.0
dtype: float64
1  | s.sub(s3, fill_value=2)  | 
地    1.0
天   -1.0
宇    6.0
玄   -2.0
黄    9.0
dtype: float64
1  | s.div(s3, fill_value=4)  | 
地    0.750000
天    0.250000
宇    3.000000
玄    0.714286
黄   -3.500000
dtype: float64
1  | s.mul(s3, fill_value=3)  | 
地     9.0
天     3.0
宇    27.0
玄    35.0
黄   -14.0
dtype: float64
ipynb 请查看:https://github.com/iOSDevLog/AIDevLog/blob/master/Python%20%E5%9F%BA%E7%A1%80/PandasBasic.ipynb