简介
Pandas是一个能够提供快速、灵活和富有表现力的数据结构,旨在让处理“关系”和“标记”数据更加直观。
Pandas适合的数据类型列表:
- 具有异构类型的表格数据,如SQL表或Excel电子表格中
- 有序和无序时间序列数据
- 具有行和列标签的任意矩阵数据
- 任何其他形式的观察/统计数据集
Pandas的两个主要数据结构是Series(一维)和DataFrame(二维),用来处理金融、统计、社会科学和许多工程领域。对于R语言用户,DataFrame提供了R的data.frame提供的一切甚至更多。pandas是基于Numpy之上,旨在于许多其他第三方库能够很多的集成在计算机科学环境中。
优点:
- 轻松处理浮点和非浮点数据中缺失的数据(表示为NaN)
- 大小可变性:可以丛DataFrame和更高维度的对象中插入和删除列
- 自动和显示数据对齐:对象可以显式对齐到一组标签,或者用户只忽略标签,使得series、DataFrame等在计算中自动对齐数据
- 强大、灵活的按功能分组,对数据集执行拆分应用组合,用于聚合和转换数据
- 轻松将其他Python和NumPy 数据结构中不规则、不同索引的数据转换为DataFrame对象
- 基于标签的智能切片、花式索引和大型数据集的子设置
- 直观的合并和联接数据集
- 数据集的灵活重塑和透视
- 轴的分层标记(每个刻度可以有多个标签)
- 强大的 IO 工具,用于从平面文件(CSV 和分隔)、Excel 文件、数据库加载数据,以及从超快HDF5 格式保存/加载数据
- 时间序列-特定功能:日期范围生成和频率转换、移动窗口统计、移动窗口线性回归、日期偏移和滞后等。
学习
- 对象创建
- 传递值列表创建Series,并让pandas创建整数索引
s = pd.Series([1, 3, 5, np.nan, 6, 8]) - 传递日期时间索引创建DataFrame
dates = pd.date_range('20130101', periods=6) - 传递标记列的NumPy数组创建DataFrame
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD')) - 传递可转换为类似series的字典对象创建为DataFrame
df2 = pd.DataFrame({'A': 1.,
'B': pd.Timestamp('20130102'),
'C': pd.Series(1, index=list(range(4)), dtype='float32'),
'D': np.array([3] * 4, dtype='int32'),
'E': pd.Categorical(["test", "train", "test", "train"]),
'F': 'foo'}) - 查看各列dtype
df2.dtypes
- 传递值列表创建Series,并让pandas创建整数索引
- 查看数据
- 查看底部行
df.tail(3) - 查看顶部行
df.head() - 查看索引
df.index - 查看列
df.columns - 显示数据的快速统计摘要
df.describe() - 求数据的转置
df.T - 按轴排序
df.sort_index(axis=1, ascending=False) - 按值排序
df.sort_values(by='B')
- 查看底部行
- 选择
- 索引和选择数据和多索引/高级索引
- 选择单列
df['A'] - 通过[]对行进行切片操作
df[0:3]
- 选择单列
- 按标签选择
- 使用标签获取横截面
df.loc[dates[0]] - 按标签在多轴上选择
df.loc[:,['A','B']] - 显示标签切片,包含两个终结点
df.loc['20130102':'20130104', ['A', 'B']] - 返回降维的对象
df.loc['20130102', ['A', 'B']] - 获取标量值
df.loc[dates[0], 'A'] - 快速访问标量
df.at[dates[0], 'A']
- 使用标签获取横截面
- 按位置选择
- 按位置选择
df.iloc[3] - 通过整数切片
df.iloc[3:5,0:2] - 通过整数位置列表
df.iloc[[1,2,4][0,2]] - 显式切片行
df.iloc[1:3,:] - 显式切片列
df.iloc[:,1:3] - 显式获取值
df.iloc[1,1] - 快速访问值
df.iat[1,1]
- 按位置选择
- 布尔索引
- 使用单个列值来选择数据
df[df.A > 0] - 从满足布尔条件的数据帧中选择值
df[df > 0] - 使用isin进行选择
df2[df2['E'].isin(['two', 'four'])]
- 使用单个列值来选择数据
- 赋值
- 设置新列会自动按索引对齐数据
s1 = pd.Series([1, 2, 3, 4, 5, 6], index=pd.date_range('20130102', periods=6)) - 标签赋值
df.at[dates[0], 'A'] = 0 - 索引赋值
df.iat[0, 1] = 0 - NumPy赋值
df.loc[:, 'D'] = np.array([5] * len(df)) - where设置赋值操作
In [52]: df2 = df.copy()
In [53]: df2[df2 > 0] = -df2
- 设置新列会自动按索引对齐数据
- 数据缺失
Pandas主要使用np.nan表示缺失的数据。- 重新编制索引允许您更改/添加/删除指定轴上的索引,这将返回数据的副本。
df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
df1.loc[dates[0]:dates[1], 'E'] = 1 - 删除缺失数据的行
df1.dropna(how='any') - 填充缺失数据
df1.fillna(value=5) - 获取值为nan的布尔蒙版
In [60]: pd.isna(df1)
Out[60]:
A B C D F E
2013-01-01 False False False False True False
2013-01-02 False False False False False False
2013-01-03 False False False False False True
2013-01-04 False False False False False True
- 重新编制索引允许您更改/添加/删除指定轴上的索引,这将返回数据的副本。
- 索引和选择数据和多索引/高级索引