详解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 DataFrame的列

    首先,将术语解释一下,因为Pandas里的数据是以DataFrame对象的形式存储的,DataFrame可以理解为一个二维表格,行对应数据的条目,列对应数据的属性。从这个角度来看,在Pandas中我们所说的“扩展DataFrame的列”,指的是添加新的列(也就是属性)到DataFrame对象中。 下面是一个添加新列到DataFrame中的完整攻略(注:以下所…

    python-answer 2023年3月27日
    00
  • 在Python中设置Pandas数据框的背景颜色和字体颜色

    在Python Pandas中设置数据框的背景颜色和字体颜色可以用到Pandas自带的style模块。其主要包括了两个主要函数,即background_gradient()和highlight_max()。 设置背景颜色 1. background_gradient() 使用background_gradient()函数,可以根据值的大小自动为DataFra…

    python-answer 2023年3月27日
    00
  • Python pandas的八个生命周期总结

    Python pandas的八个生命周期总结 1. 导入数据 在使用pandas进行数据处理之前,首先需要将数据导入到python环境中。pandas提供了多种方式来导入数据,包括从csv、excel、json、数据库等格式中导入数据。 以下是一个从csv文件中导入数据的示例: import pandas as pd data = pd.read_csv(‘…

    python 2023年5月14日
    00
  • 使用Python进行RFM分析

    RFM分析指的是根据用户的最近一次购买时间、购买频率以及平均消费金额等因素来对用户进行分群和分析的一种方法。Python是一种非常适合进行RFM分析的语言,因为Python的数据分析工具和机器学习工具非常强大且易于使用。下面将详细讲解如何使用Python进行RFM分析。 1. 数据准备 RFM分析需要的数据通常包括每个用户的购买时间、购买金额以及订单号等信息…

    python-answer 2023年3月27日
    00
  • pandas 强制类型转换 df.astype实例

    接下来我将为您详细讲解Pandas强制类型转换df.astype()实例的完整攻略: 什么是Pandas强制类型转换? Pandas是一个开源、易于使用的数据处理库,它提供了许多内置函数和方法来处理数据。其中包括强制类型转换的方法,即使用df.astype()方法来将一个数据帧中的某些列(或所有列)强制转换为指定的数据类型。 使用df.astype()方法进…

    python 2023年5月14日
    00
  • pandas如何使用列表和字典创建 Series

    使用列表和字典创建 Pandas 中的 Series 是很常见的操作,主要通过 pd.Series(list) 或 pd.Series(dict) 来实现。 使用列表创建 Series 使用列表创建 Series,可以先定义一个列表对象,然后使用 pd.Series() 将其转换为 Pandas 中的 Series。 示例代码如下: import panda…

    python 2023年5月14日
    00
  • 手把手教你使用Python绘制时间序列图

    那么让我来详细讲解“手把手教你使用Python绘制时间序列图”的完整攻略。 介绍 时间序列图是一种用于展示随时间变化的数据的图表,可以帮助我们从数据中识别出时间上的模式和趋势变化。Python作为一种强大的数据分析工具,当然也可以用来绘制时间序列图。本文将讲解使用Python绘制时间序列图的完整攻略,包括准备工作、使用模块、数据处理、图表绘制等内容。 准备工…

    python 2023年5月14日
    00
  • pandas添加自增列的2种实现方案

    针对这个话题,我来详细讲解“pandas添加自增列的2种实现方案”的完整攻略。下面将分为两个方案来进行介绍。 方案一:使用pandas的cumcount()方法 pandas提供了cumcount()方法,可以针对某一列的每一个元素来进行计数,并添加到DataFrame中。下面分步骤来看这个方法的实现: 1. 假设我们有如下的数据集: import pand…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部