详解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日

相关文章

  • python爬取网页版QQ空间,生成各类图表

    题目描述 本文旨在向大家介绍如何用 Python 爬取自己或好友的 QQ 空间数据,并通过数据分析与可视化功能生成各类图表。 前置技能 Python 基础知识 数据抓取基础 数据处理与可视化基础 步骤 1:登录空间 首先,我们需要通过 QQ 的网页登录界面进行登录,然后跳转到相应的空间页面。 示例一: from selenium import webdriv…

    python 2023年5月14日
    00
  • Python使用Matplotlib绘制三维散点图详解流程

    下面是详细讲解Python使用Matplotlib绘制三维散点图详解流程的完整攻略。 1. Matplotlib绘制三维散点图的基本思路 Matplotlib是Python中常用的一个绘图框架,可以绘制多种类型的图形,包括二维和三维的图形。其中,绘制三维散点图需要使用mpl_toolkits.mplot3d库。其基本流程如下: 导入相关的库:numpy、ma…

    python 2023年6月13日
    00
  • 使用Python Pandas .iloc[] 提取行数

    当我们针对一个DataFrame数据表需要提取行数时,就需要使用Pandas中的.iloc[]方法。.iloc[]方法的用法如下: dataframe.iloc[row_index, column_index] 其中,row_index表示要提取的行数的序号,column_index则表示要提取的列数的序号。Pandas可以支持多种方式来表示row_inde…

    python-answer 2023年3月27日
    00
  • 用Python将Excel转换为CSV

    把Excel文件转换为CSV文件有许多不同的方式,其中,使用Python也是非常方便快捷的一种方式。下面我将详细讲解如何使用Python将Excel文件转换为CSV文件。 准备工作 在此之前,需要确保已经安装好了Python所需环境和包。需要用到的包为pandas,可以通过以下命令进行安装: pip install pandas Python代码实现 在导入…

    python-answer 2023年3月27日
    00
  • Python使用Pandas对csv文件进行数据处理的方法

    首先,需要安装Pandas库,可以使用以下命令进行安装: pip install pandas 安装完成后,可以使用以下代码读取csv文件: import pandas as pd df = pd.read_csv(‘data.csv’) print(df.head()) # 打印前五行数据 这里data.csv是csv文件的文件名,pd.read_csv函…

    python 2023年5月14日
    00
  • 在Python中把多个CSV文件读入独立的DataFrames中

    在Python中想要把多个CSV文件读入独立的DataFrames中,可以使用Python的pandas库。下面是一个详细的攻略: 步骤1:导入pandas库 首先需要导入pandas库,其常用的别名是pd。可以使用以下代码导入: import pandas as pd 步骤2:读取CSV文件 要读入CSV文件,可以使用pandas的read_csv函数。可…

    python-answer 2023年3月27日
    00
  • 彻彻底底地理解Python中的编码问题

    接下来我会详细讲解“彻彻底底地理解Python中的编码问题”的完整攻略。 了解编码的基础知识 在Python中,字符串是使用Unicode编码的。Unicode是一个字符集,可以表示各种各样的字符。但是,Unicode对于如何将字符转换为具体的字节序列并没有做出规定,因此需要用编码来实现字符与字节之间的转换。 常见的编码方式有UTF-8、UTF-16、GB2…

    python 2023年5月14日
    00
  • Python matplotlib实现折线图的绘制

    下面我来详细讲解一下Python Matplotlib实现折线图的绘制步骤: 1. 准备数据 在绘制折线图前,我们需要准备好数据。假设我们要绘制一个公司五年内收入的折线图,数据如下: year = [2015, 2016, 2017, 2018, 2019] income = [1000, 1500, 2000, 3000, 5000] 其中,year表示年…

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