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

yizhihongxing

详解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中进行字符串操作是一个经常用到的操作,下面是进行这个操作的完整攻略。 1. 引入相关库和数据 首先我们需要引入所需要的库和数据,如下所示: import pandas as pd data = {‘name’: [‘张三’, ‘李四’, ‘王五’], ‘age’: [20, 22, 25], ’email’: [‘zhang…

    python-answer 2023年3月27日
    00
  • Pandas DataFrame数据的更改、插入新增的列和行的方法

    Pandas是Python中最常用的数据处理和分析库之一。其中,DataFrame是Pandas中最重要的数据类型之一,它可以看作是Excel表格的 Python 版本。在这个表格中,我们可以对数据进行增删改查的操作。 下面,我将详细讲解Pandas中DataFrame数据更改、插入新增的列和行的方法: DataFrame数据更改 Pandas中DataFr…

    python 2023年5月14日
    00
  • pyspark自定义UDAF函数调用报错问题解决

    关于“pyspark自定义UDAF函数调用报错问题解决”的完整攻略,以下是具体步骤: 1. 定义自定义UDAF函数 首先,定义自定义UDAF函数的主要步骤如下: 1.继承 pyspark.sql.functions.UserDefinedAggregateFunction 类。 2.重写 initialize、update 和 merge 方法,分别实现聚合…

    python 2023年5月14日
    00
  • 在Python中使用Pandas替换缺失值

    首先需要明确什么是缺失值(Missing value)。在Pandas中,缺失值通常用NaN(Not a number)表示。 Pandas提供了很多函数可以对缺失值进行操作。下面是一个完整的例子,让你了解在Python中如何使用Pandas替换缺失值。 # 导入Pandas库 import pandas as pd # 创建一个数据帧 df = pd.Da…

    python-answer 2023年3月27日
    00
  • Pandas中的聚类抽样

    Pandas中的聚类抽样是一种基于可变尺寸块的聚类方式,它可以将数据集根据相似性分组,并通过每个分组的代表性样本来进行抽样操作。这种聚类抽样方法可以帮助我们在处理大规模数据时以较高速度进行分析,同时保证分析的准确性和可靠性。 Pandas中聚类抽样方法的实现需要用到pd.concat()函数和pd.cut()函数。具体步骤如下: 首先,需要将数据集按照指定的…

    python-answer 2023年3月27日
    00
  • pandas Dataframe实现批量修改值的方法

    我们来详细讲解如何使用pandas Dataframe实现批量修改值的方法。 1. 前言 pandas是Python数据分析的重要工具之一,它提供了强大的数据结构和数据操作的功能。其中,DataFrame是最重要、最常用的数据结构之一,类似于一个二维数组(或者是一张SQL表),用来存储和处理实际数据。 在实际的数据处理中,我们常常需要对数据进行一些批量的修改…

    python 2023年5月14日
    00
  • Pandas读取csv的实现

    下面是关于“Pandas读取csv的实现”的完整攻略: 什么是Pandas Pandas是一个数据分析库,提供了许多用于数据处理和分析的函数和工具,它可以读写各种格式的数据,其中包括csv格式的数据。通过Pandas库,我们可以很方便地读取csv格式的数据并对其进行处理和分析。 Pandas如何读取csv Pandas提供了读取csv文件的函数 read_c…

    python 2023年5月14日
    00
  • 用SQLAlchemy将Pandas连接到数据库

    首先,我们需要先安装SQLAlchemy和Pandas包。可以使用以下命令在终端或命令行中进行安装: pip install sqlalchemy pandas 接下来,我们需要创建一个数据库引擎。在这里,我们使用SQLite数据库。 from sqlalchemy import create_engine engine = create_engine(‘s…

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