Pandas数据处理二

3.7 合并数据集: Concat与Append操作
将不同的数据源进行合并是数据科学中最有趣的事情之一, 这既包括将两个不同的数据集非常简单地拼接在一起, 也包括用数据库那样的连接(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_on与right_on参数
有时你也需要合并两个列名不同的数据集, 例如前面的员工信息表中有一个字段不是“employee”而
是“name”。 在这种情况下, 就可以用 left_on 和 right_on 参数来指定列名:

03. left_index与right_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-3: Pandas的累计方法

指标 描述
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 中最重要的操作可能就是 aggregate、 filter、 transform 和 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()

原文地址:https://www.cnblogs.com/BaoBobbyZhang/p/12147045.html

时间: 2024-10-13 14:39:27

Pandas数据处理二的相关文章

Pandas 数据处理入门教程合集

基础教程 Pandas 数据处理(三) - Cheat Sheet 中文版 来源,2张图覆盖了几乎所有常用的 Pandas 用法. Pandas_Cheat_Sheet_中文版.pdf 下载 Pandas 数据处理(二) - 筛选数据 选取列,使用方括号 选取行,行标签使用loc,行号使用iloc,ix兼容处理loc与iloc(deprecated) 简单的逻辑判断(<, >, ==, &, |, ~ 等) 自定义函数,loc,apply,lambda Pandas 数据处理(一) -

Python3快速入门(十五)——Pandas数据处理

Python3快速入门(十五)--Pandas数据处理 一.函数应用 1.函数应用简介 如果要将自定义函数或其它库函数应用于Pandas对象,有三种使用方式.pipe()将函数用于表格,apply()将函数用于行或列,applymap()将函数用于元素. 2.表格函数应用 可以通过将函数对象和参数作为pipe函数的参数来执行自定义操作,会对整个DataFrame执行操作. # -*- coding=utf-8 -*- import pandas as pd import numpy as np

Pandas数据处理实战:福布斯全球上市企业排行榜数据整理

手头现在有一份福布斯2016年全球上市企业2000强排行榜的数据,但原始数据并不规范,需要处理后才能进一步使用. 本文通过实例操作来介绍用pandas进行数据整理. 照例先说下我的运行环境,如下: windows 7, 64位 python 3.5 pandas 0.19.2版本 在拿到原始数据后,我们先来看看数据的情况,并思考下我们需要什么样的数据结果. 下面是原始数据: 在本文中,我们需要以下的初步结果,以供以后继续使用. 可以看到,原始数据中,跟企业相关的数据中(“Sales”,“Prof

python数据分析实战-第6章-深入pandas数据处理

第6章 深入pandas:数据处理 117 6.1 数据准备 117 合并 1234567891011 #merge是两个dataframe共同包含的项import numpy as npimport pandas as pdframe1 = pd.DataFrame( {'id':['ball','pencil','pen','mug','ashtray'], 'price': [12.33,11.44,33.21,13.23,33.62]})print(frame1)print()frame

pandas数据处理

1.删除重复元素 使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True. - keep参数:指定保留哪一重复的行数据 - True 重复的行 创建具有重复元素行的DataFrame from pandas import Series,DataFrame import numpy as np import pandas as pd #创建一个df np.random.seed(10) df = DataFra

Pandas数据处理一

Pandas 是在NumPy 基础上建立的新程序库, 提供了一种高效的 DataFrame 数据结构. DataFrame 本质上是一种带行标签和列标签. 支持相同类型数据和缺失值的多维数组. Pandas 不仅为带各种标签的数据提供了便利的存储界面, 还实现了许多强大的操作, 这些操作对数据库框架和电子表格程序的用户来说非常熟悉. 建立在NumPy 数组结构上的 Pandas, 尤其是它的 Series 和 DataFrame 对象, 为数据科学家们处理那些消耗大量时间的“数据清理”(data

pandas 数据处理遇到的问题

数据为DataFrame格式,如下: 1.对每一行,FirstCab的值为空时,Weight的值乘以0.8 方法一(可行):df.loc[df['FirstCab'].isnull(),'Weight'] *= 0.8 方法二(可行):df['Weight'] = np.where(df['FirstCab'].isnull(),df['Weight']*0.8,df['Weight']) 方法三(不可行):df[df['FirstCab'].isnull()]['Weight']  *= 0.

python pandas 数据处理

from pandas import Series,DataFrame import pandas as pd import numpy as np python中pandas.DataFrame对行与列求和及添加新行与列示例 df = DataFrame(np.random.randn(4, 5), columns=['A', 'B', 'C', 'D', 'E']) df['Col_sum'] = df.apply(lambda x: x.sum(), axis=1) df.loc['Row

pandas 数据处理

1. 查看数值数据的整体分布情况 datafram.describe() 输出: agecount 1463.000000mean 22.948052std 8.385384min 13.00000025% 17.00000050% 20.00000075% 27.000000max 64.000000 其中的25%,50%这些是百分位数. 百分位数的定义为: 统计学术语,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数.可表示为:一组n个