Pandas数据处理二

3.7 合并数据集: ConcatAppend操作
将不同的数据源进行合并是数据科学中最有趣的事情之一, 这既包括将两个不同的数据集非常简单地拼接在一起, 也包括用数据库那样的连接(join) 与合并(merge) 操作处理有重叠字段的数据集。 Series DataFrame 都具备这类操作, Pandas 的函数与方法让数据合并变得快速简单。

先来用 pd.concat 函数演示一个 Series DataFrame 的简单合并操作。 之后, 我们将介绍 Pandas 中更复杂的 merge join 内存数据合并操作。

1 # Pandas 0.18版中的函数签名
2 pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
3 keys=None, levels=None, names=None, verify_integrity=False,
4 copy=True)

 默认情况下, DataFrame 的合并都是逐行进行的(默认设置是 axis=0) 。 与 np.concatenate() 一样, pd.concat 也可以设置合并坐标轴, 例如下面的示例:

03. append()方法
因为直接进行数组合并的需求非常普遍, 所以 Series DataFrame 对象都支持 append 方法, 让你通过最少的代码实现合并功能。 例如, 你可以使用 df1.append(df2), 效果与 pd.concat([df1,df2]) 一样:

需要注意的是, 与 Python 列表中的 append() extend() 方法不同, Pandas append() 不直接更新原有对象的值, 而是为合并后的数据创建一个新对象。 因此, 它不能被称之为一个非常高效的解决方案, 因为每次合并都需要重新创建索引和数据缓存。

总之, 如果你需要进行多个 append 操作, 还是建议先创建一个 DataFrame 列表, 然后用 concat() 函数一次性解决所有合并任务。

3.8 合并数据集: 合并与连接

Pandas 的基本特性之一就是高性能的内存式数据连接(join) 与合并(merge) 操作。 如果你有使用数据库的经验, 那么对这类操作一定很熟悉。 Pandas 的主接口是 pd.merge 函数, 下面让我们通过一些示例来介绍它的用法。
pd.merge() 函数实现了三种数据连接的类型: 一对一、 多对一和多对多。 这三种数据连接类型都通过pd.merge() 接口进行调用, 根据不同的数据连接需求进行不同的操作。 下面将通过一些示例来演示这三种类型, 并进一步介绍更多的细节。
01. 参数on的用法
最简单的方法就是直接将参数 on 设置为一个列名字符串或者一个包含多列名称的列表:
02. left_onright_on参数
有时你也需要合并两个列名不同的数据集, 例如前面的员工信息表中有一个字段不是“employee”
“name”。 在这种情况下, 就可以用 left_on right_on 参数来指定列名:
03. left_indexright_index参数
除了合并列之外, 你可能还需要合并索引。 就像下面例子中的数据那样:
how 参数支持的数据连接方式还有 'outer''left' 'right'。 外连接(outer join) 返回两个输入列的
交集, 所有缺失值都用 NaN 填充:
左连接(left join) 和右连接(right join) 返回的结果分别只包含左列和右列, 如下所示
3.9 累计与分组
在对较大的数据进行分析时, 一项基本的工作就是有效的数据累计(summarization) : 计算累计
aggregation) 指标, 如 sum()mean()median()min() max(), 其中每一个指标都呈现了大数据
集的特征。 在这一节中, 我们将探索 Pandas 的累计功能, 从类似前面 NumPy 数组中的简单操作, 到基于
groupby 实现的复杂操作。
3-3Pandas的累计方法

指标 描述
count() 计数项


first()last() 第一项与最后一项
mean()median() 均值与中位数
min()max() 最小值与最大值
std()var() 标准差与方差
mad() 均值绝对偏差(mean absolute deviation
prod() 所有项乘积
sum() 所有项求和


3.9.3 GroupBy: 分割、 应用和组合
简单的累计方法可以让我们对数据集有一个笼统的认识, 但是我们经常还需要对某些标签或索引的局部进
行累计分析, 这时就需要用到 groupby 了。 虽然分组group by) 这个名字是借用 SQL 数据库语言的命
令, 但其理念引用发明 R 语言 frame Hadley Wickham 的观点可能更合适: 分割(split) 、 应用(apply
和组合(combine) 。
为了得到这个结果, 可以对 DataFrameGroupBy 对象应用累计函数, 它会完成相应的应用 / 组合步骤
并生成结果:

1 In[13]: df.groupby('key').sum()
2 Out[13]: data
3 key
4 A 3
5 B 5
6 C 7

GroupBy 中最重要的操作可能就是 aggregatefiltertransform apply(累计、 过滤、 转换、 应
用) 了, 后文将详细介绍这些内容, 现在先来介绍一些 GroupBy 的基本操作方法
(1) 累计。 我们目前比较熟悉的 GroupBy 累计方法只有 sum() median() 之类的简单函数, 但是
aggregate() 其实可以支持更复杂的操作, 比如字符串、 函数或者函数列表, 并且能一次性计算所有
累计值。 下面来快速演示一个例子:
(2) 过滤。 过滤操作可以让你按照分组的属性丢弃若干数据。 例如, 我们可能只需要保留标准差超过某
个阈值的组:
(3) 转换。 累计操作返回的是对组内全量数据缩减过的结果, 而转换操作会返回一个新的全量数据。 数
据经过转换之后, 其形状与原来的输入数据是一样的。 常见的例子就是将每一组的样本数据减去各组
的均值, 实现数据标准化:
(4) apply() 方法。 apply() 方法让你可以在每个组上应用任意方法。 这个函数输入一个
DataFrame, 返回一个 Pandas 对象(DataFrame Series) 或一个标量(scalar, 单个数值) 。 组合
操作会适应返回结果类型。
DataFrame pivot_table 实现的效果等同于上一节的管道命令的代码:
01. Python字符串方法相似的方法
几乎所有 Python 内置的字符串方法都被复制到 Pandas 的向量化字符串方法中。 下面的表格列举了
Pandas str 方法借鉴 Python 字符串方法的内容:
len() lower() translate() islower()
ljust() upper() startswith() isupper()
rjust() find() endswith() isnumeric()
center() rfind() isalnum() isdecimal()
zfill() index() isalpha() split()
strip() rindex() isdigit() rsplit()
rstrip() capitalize() isspace() partition()
lstrip() swapcase() istitle() rpartition()

猜你喜欢

转载自www.cnblogs.com/BaoBobbyZhang/p/12147045.html