详解PANDAS 数据合并与重塑(join/merge篇)

详解PANDAS数据合并与重塑(join/merge篇)

在PANDAS中,数据合并和重塑是十分重要的基础操作。本文将详细讲解PANDAS中的数据合并和重塑。

合并数据

横向合并

横向合并意味着将两个数据集按照行合并,即增加新的列。

可以使用pandas中的merge()函数实现。例如:

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
                   'value': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
                   'value': [5, 6, 7, 8]})

merged = pd.merge(df1, df2, on='key', how='inner')

这里df1df2是两个数据集,它们之间有一个共同的列key,我们使用merge()函数将它们按照key列进行合并。how参数表示合并方式,可选值包括:

  • inner: 只保留同时出现在两个数据集中的行
  • outer: 保留出现在任意一个数据集中的所有行
  • left: 保留出现在左边数据集(df1)中的所有行
  • right: 保留出现在右边数据集(df2)中的所有行

结果如下:

   key  value_x  value_y
0  B    2        5
1  D    4        6

这里的value_xvalue_y分别是df1df2中的value列,因为它们原来是不同的列名,所以被自动重命名了。

纵向合并

纵向合并意味着将两个数据集按照列合并,即增加新的行。

可以使用pandas中的concat()函数实现。例如:

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
                   'value': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['E', 'F', 'G', 'H'],
                   'value': [5, 6, 7, 8]})

concatenated = pd.concat([df1, df2])

这里df1df2是两个数据集,它们的列名和列数相同,我们使用concat()函数将它们按照列进行合并。concat()函数默认按照纵向进行合并,即增加新的行。

结果如下:

  key  value
0  A    1
1  B    2
2  C    3
3  D    4
4  E    5
5  F    6
6  G    7
7  H    8

重塑数据

在PANDAS中,重塑数据的操作包括“长表格”转换为“宽表格”和“宽表格”转换为“长表格”两种。下面分别介绍具体的操作。

长表格转换为宽表格

将长表格转换为宽表格是指将一张表格中的一列分割成多列,并将元素填充到这些列中去。

可以使用pandas中的pivot_table()函数实现。例如:

import pandas as pd

data = pd.DataFrame({'date': ['2020-01-01', '2020-01-02', '2020-01-03'],
                    'product': ['A', 'A', 'B'],
                    'sales': [100, 200, 300]})

pivoted = pd.pivot_table(data, values='sales', index='date', columns='product')

这里data是一张长表格,我们使用pivot_table()函数将data中的product列转换成了多个列。其中values参数表示要填充到新列中的元素,index参数表示新表格的行索引,columns参数表示新表格的列索引。

结果如下:

product A     B
date           
2020-01-01  100   NaN
2020-01-02  200   NaN
2020-01-03  NaN   300

宽表格转换为长表格

将宽表格转换为长表格是指将一张表格中的多列合并成一列,并将元素填充到这一列中去。

可以使用pandas中的melt()函数实现。例如:

import pandas as pd

data = pd.DataFrame({'date': ['2020-01-01', '2020-01-02', '2020-01-03'],
                    'product_A_sales': [100, 200, 300],
                    'product_B_sales': [400, 500, 600]})

melted = pd.melt(data, id_vars='date', var_name='product', value_name='sales')

这里data是一张宽表格,我们使用melt()函数将data中的product_A_salesproduct_B_sales合并成了一列。其中id_vars参数表示不需要合并的列,var_name参数表示合并后的列名,value_name参数表示填充到新列中的元素。

结果如下:

date        product   sales
2020-01-01  product_A  100
2020-01-02  product_A  200
2020-01-03  product_A  300
2020-01-01  product_B  400
2020-01-02  product_B  500
2020-01-03  product_B  600

示例说明

下面给出两个示例说明。

示例一:横向合并

假设我们有两张表格,一张包含考试成绩,另一张包含考试日期。我们要将这两张表格按照学生姓名合并起来,得到一张包含学生姓名、考试成绩和考试日期的表格。

import pandas as pd

scores = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'],
                      'score': [80, 90, 85]})
dates = pd.DataFrame({'name': ['Alice', 'Charlie', 'David'],
                     'date': ['2020-01-01',  '2020-01-02', '2020-01-01']})

merged = pd.merge(scores, dates, on='name', how='outer')

这里的merged是按照name列将scoresdates合并后的表格。

示例二:长表格转换为宽表格

假设我们得到了如下的一张表格,它记录了不同地区在某一年的GDP。

地区    一季度    二季度    三季度    四季度    
北京    2000    2200    2400    2600
上海    2400    2600    2800    3000
广州    1800    1900    2000    2100
深圳    2000    2200    2400    2600

我们希望将他转换成宽表格的形式,即如下形式:

       一季度    二季度    三季度    四季度
北京    2000    2200    2400    2600
上海    2400    2600    2800    3000
广州    1800    1900    2000    2100
深圳    2000    2200    2400    2600

可以使用如下的代码实现:

import pandas as pd

data = pd.DataFrame({'地区': ['北京', '上海', '广州', '深圳'],
                     '一季度': [2000, 2400, 1800, 2000],
                     '二季度': [2200, 2600, 1900, 2200],
                     '三季度': [2400, 2800, 2000, 2400],
                     '四季度': [2600, 3000, 2100, 2600]})

pivoted = pd.pivot_table(data, index='地区')

这里pivoted是将data表格按照地区列进行重塑后的新表格,我们不需要指定columns参数因为它只有一个值列GDP

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解PANDAS 数据合并与重塑(join/merge篇) - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Pandas数据离散化原理及实例解析

    Pandas数据离散化原理 首先,我们需要了解什么是数据离散化。数据离散化指的是将连续数值型数据转换成为离散数据的过程,其目的通常是将连续型数据划分为若干个离散的区间,便于数据的处理和分析。 而Pandas提供了非常便利的数据离散化工具——cut函数。cut函数可以根据设定的bins,将一组数据划分为不同的区间,返回一个Series类型的离散化后的数据。 c…

    python 2023年5月14日
    00
  • pandas 对group进行聚合的例子

    下面是关于pandas对group进行聚合的例子的完整攻略: 什么是groupby 在pandas中,可以通过groupby来将数据分组并按组进行聚合操作。这个功能类似于SQL中的GROUP BY操作。 聚合函数 在进行分组聚合操作时,需要使用聚合函数,常见的聚合函数有mean, sum, max, min, count, median等。 示例1 我们可以…

    python 2023年5月14日
    00
  • Pandas绘图方法(plot)详解

    Pandas 在数据可视化方面有着较为广泛的应用,Pandas 的 plot() 方法可以用来绘制各种类型的统计图表,包括线图、散点图、柱状图、饼图、密度图等等。 plot() 方法是基于matplotlib库构建的,因此具有很高的灵活性和可定制性,可以通过参数设置对图表进行调整。plot()方法可以直接作用于Series、DataFrame和GroupBy…

    2023年3月6日 Pandas
    00
  • 在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南

    Python2.7停止支持与迁移指南 1. 为什么需要迁移? Python2.7将于2020年1月1日停止支持,维护期也于今年正式结束,这意味着Python 2.7已经不再更新,而且也很可能存在着一些无法修复的安全漏洞和性能问题。因此,迁移到Python 3.x版本是不可避免的。 2. Python2.7到Python3.x的主要变化 print语句变成了p…

    python 2023年5月14日
    00
  • Python3 微信支付(小程序支付)V3接口的实现

    下面是 Python3 微信支付(小程序支付)V3接口的实现的详细攻略。 获取微信支付证书 在开始实现微信支付接口之前,需要先获取微信支付证书。可以通过以下步骤获取: 登录微信商户平台 进入“账户中心”,选择“API证书”,在右上角点击“下载证书”,下载压缩包。 解压压缩包,里面包含多个文件,其中包括apiclient_key.pem,apiclient_c…

    python 2023年5月14日
    00
  • 修改Pandas的行或列的名字(重命名)

    修改Pandas的行或列的名字,又称为重命名,是数据处理中常用的基本操作。下面是修改Pandas的行或列名字的攻略。 一、使用rename方法 Pandas的DataFrame和Series都有rename方法,可以用来重命名行或列。其中,DataFrame的rename方法可以同时重命名行和列。 语法: DataFrame.rename(mapper=No…

    python 2023年5月14日
    00
  • Pandas之排序函数sort_values()的实现

    Pandas是Python中数据分析的常用库,数据排序是数据分析中常用的操作之一。Pandas中的sort_values()函数可以实现对DataFrame和Series中的元素进行排序。下面就来详细讲解sort_values()函数的实现及用法。 sort_values()的语法 Pandas中的sort_values()函数定义如下: sort_valu…

    python 2023年5月14日
    00
  • 如何使用Pandas创建一个相关矩阵

    下面是如何使用Pandas创建一个相关矩阵的完整攻略: 第一步:安装 Pandas 首先需要安装 Pandas,可以通过以下命令在终端中进行安装: pip install pandas 第二步:导入 Pandas 和相关数据 导入 Pandas 和相关数据,并查看数据的基本信息: import pandas as pd # 导入数据 data = pd.re…

    python-answer 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部