首页 > 其他分享 >【pandas基础】--数据拆分与合并

【pandas基础】--数据拆分与合并

时间:2023-05-18 13:33:58浏览次数:37  
标签:pd name -- df1 DataFrame df2 df 拆分 pandas

数据集拆分是将一个大型的数据集拆分为多个较小的数据集,可以让数据更加清晰易懂,也方便对单个数据集进行分析和处理。
同时,分开的数据集也可以分别应用不同的数据分析方法进行处理,更加高效和专业。

数据集合并则是将多个数据集合并成一个大的数据集,可以提供更全面的信息,也可以进行更综合的数据分析。
同时,数据集合并也可以减少数据处理的复杂度和时效性,提升数据分析的准确性和结果的可靠性。

1. 数据集拆分

拆分数据集比较简单,之前介绍过数据检索的各种方式,其实检索出的结果就是拆分出来的数据。

1.1 拆分行

拆分单行和多行。

import pandas as pd

df = pd.DataFrame(
    {
        "name": ["小红", "小明", "小华"],
        "age": [13, 15, 14],
        "gender": ["男", "女", "男"],
    }
)
first_row = df.loc[0:0, :]
left_rows = df.loc[1:, :]

image.png

1.2 拆分列

拆分单列或者多列。

import pandas as pd

df = pd.DataFrame(
    {
        "name": ["小红", "小明", "小华"],
        "age": [13, 15, 14],
        "gender": ["男", "女", "男"],
    }
)

first_col = df[["name"]]
left_cols = df[["age", "gender"]]

image.png

1.3 按条件拆分

下面的示例按照列的值来拆分数据集。

import pandas as pd

df = pd.DataFrame(
    {
        "name": ["小红", "小明", "小华"],
        "age": [13, 15, 14],
        "gender": ["男", "女", "男"],
    }
)

males = df[df["gender"] == "男"]
greater13 = df[df["age"] > 13]

image.png

如果有多个条件,可以通过逻辑与(&)逻辑或(|)符号来连接,具体可以参照之前介绍数据检索的文章。

2. 数据集合并

数据集的合并也是比较常用的,因为我们收集来的数据可能来自不同的地方。

2.1 merge 方法

merge方法合并DataFrame时,有两个重要的参数:

  1. how:设置合并的方式,有innerouterleftright四种方式。
  2. on:依据那个列来合并

下面是四种不同合并方式的示例。
inner合并:name值相同的数据才保留下来。

import pandas as pd

df1 = pd.DataFrame(
    {
        "name": ["小红", "小明"],
        "age": [13, 15],
        "gender": ["男", "女"],
    }
)

df2 = pd.DataFrame(
    {
        "name": ["小红", "小华"],
        "score": [99, 100],
    }
)

df = pd.merge(df1, df2, how="inner", on="name")
df

image.png

outer合并:两个DataFramename都保留下来,合并后缺失值的填充NaN

df = pd.merge(df1, df2, how="outer", on="name")
df

image.png

left合并:df1name全部保留下来,缺失的值填充NaN

df = pd.merge(df1, df2, how="left", on="name")
df

image.png

right合并:df2name全部保留下来,缺失的值填充NaN

df = pd.merge(df1, df2, how="right", on="name")
df

image.png

2.2 concat 方法

两个DataFrame结构相同时,一般是按行来合并(axis=0)。

df1 = pd.DataFrame(
    {
        "name": ["小红", "小明"],
        "age": [13, 15],
        "gender": ["男", "女"],
    }
)

df2 = pd.DataFrame(
    {
        "name": ["小红", "小华"],
        "age": [13, 15],
        "gender": ["男", "女"],
    }
)

df = pd.concat([df1, df3], axis=0)
df

image.png

如果两个DataFrame结构不一样时,用列合并(axis=1)。

df1 = pd.DataFrame(
    {
        "name": ["小红", "小明"],
        "age": [13, 15],
        "gender": ["男", "女"],
    }
)

df2 = pd.DataFrame(
    {
        "score": [100, 90],
        "city": ["nanjing", "beijing"],
    }
)

df = pd.concat([df1, df3], axis=1)
df

image.png

2.3 join 方法

join方法和merge方法类似,主要区别在于joinDataFrame的方法,而mergepandas的方法。
下面请直接看与merge方法相似的四种示例。

inner合并:name值相同的数据才保留下来。

df1 = pd.DataFrame(
    {
        "name": ["小红", "小明"],
        "age": [13, 15],
        "gender": ["男", "女"],
    }
)

df2 = pd.DataFrame(
    {
        "name": ["小红", "小华"],
        "score": [99, 100],
    }
)

df1 = df1.set_index("name")
df2 = df2.set_index("name")
df = df1.join(df2, how="inner")
df.reset_index()

image.png
注意,这里显示了joinmerge的一个区别,join默认是依据索引(index)来合并DataFrame的,
所以,先把name设置为索引之后才合并的,合并之后又通过reset_index重置了索引,得到了和merge同样的结果。

outer合并:两个DataFramename都保留下来,合并后缺失值的填充NaN

df1 = df1.set_index("name")
df2 = df2.set_index("name")
df = df1.join(df2, how="outer")
df.reset_index()

image.png
注意,最后的数据虽然和merge一样,但是顺序有些区别。

left合并:df1name全部保留下来,缺失的值填充NaN

df1 = df1.set_index("name")
df2 = df2.set_index("name")
df = df1.join(df2, how="left")
df.reset_index()

image.png
left的结果和merge一样。

right合并:df2name全部保留下来,缺失的值填充NaN

df1 = df1.set_index("name")
df2 = df2.set_index("name")
df = df1.join(df2, how="right")
df.reset_index()

image.png
right的结果和merge一样。

3. 总结回顾

总的来说,pandas数据集拆分和合并的意义在于高效利用数据,提高数据分析的质量和效率,进一步实现数据驱动的业务增长。

本篇主要介绍了数据集拆分和合并最常用的几种基本方法,根据具体的业务组合这些基本方法,就能够进行更复杂的数据集拆分和合并。

标签:pd,name,--,df1,DataFrame,df2,df,拆分,pandas
From: https://www.cnblogs.com/wang_yb/p/17411638.html

相关文章

  • Navicat连接本地mysql报错-caching_sha2_password
     查询用户加密方式:selectuser,pluginfromuserwhereuser='root';修改用户加密方式改为mysql_native_password。alteruser'root'@'localhost'identifiedwithmysql_native_passwordby'123123';执行命令flushprivileges使权限配置项立即生效flushp......
  • Linux下安装ElasticSearch
    1.下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz2.解压安装将下载的文件上传至服务器usr/local/es下 解压压缩包tar-zxvfelasticsearch-6.4.3.tar.gz创建用户,切换用户安装#创建es分组groupaddes#为es分组添加用户es......
  • mysql导出\导入数据库
    导出数据库mysqldump-upgms-ppgms-S/data/mysql_data/mysql/mysql.sock>pgms.sql;导出单表mysqldump-upgms-ppgms-S/data/mysql_data/mysql/mysql.sockt_organization>t_organization.sql;导入数据sourcet_bindinginfo.sql; ......
  • 【故障公告】博客站点一台阿里云负载均衡被DDoS攻击
    13:06收到阿里云的电话与邮件通知,博客站点的一台阿里云负载均衡因DDoS攻击被关进黑洞(所有访问被屏蔽),部分用户的访问受影响,由此给您带来麻烦,请您谅解。您的IP:x.x.x.x实例名称:yyyy受到攻击,攻击流量已超过DDoS基础防护的黑洞阈值,服务器的所有公网访问已被屏蔽,屏蔽时长20分钟,......
  • 常用命令行
    netshwinsockresetdockerpullintel/intel-extension-for-pytorch:gpudockerrun-it--device/dev/dri-vL::/data-p7860:7860intel/intel-extension-for-pytorch:gpudockerrun-it--privileged-vL::/data-p7860:7860intel/intel-extension-for-pytorch:gp......
  • 如何正确使用表格组件的formatter属性
    fastadmin前端表格组件使用的是bootstrap-table,如果我们想要自定义表格的内容,可以使用formatter属性。最常规的用法如下:columns:[[{field:'type',title:__('type'),formatter:function(value,row){......
  • LC206. 反转链表
    Q:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例:示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出:[]提示:链表中节点的数目范围是 [0,5000]-5000<=Node.val<=5000A:思路:该题属于简......
  • 一张图解析FastAdmin中的表格列表的功能
    功能描述请根据图片上的数字索引查看对应功能说明。1.菜单名称和描述默认生成的CRUD是没有菜单名称和描述显示的,如果需要显示则可以修改权限管理->菜单规则,给对应菜单的添加上备注信息后即可显示,支持HTML2.TAB过滤选项卡在一键生成CRUD时,如果表中存在status字段且为ENUM类型,则......
  • 主流原型设计工具介绍
    什么是原型?即把系统主要功能和接口通过快速开发制作为“软件样机”,以可视化的形式展现给用户,及时征求用户意见,从而明确无误地确定用户需求。同时,原型也可用于征求内部意见,作为分析和设计的接口之一,可方便于沟通。原型设计工具:原型设计工具可以更好地明确需求,发现设计......
  • 一张图解析FastAdmin中的FormBuilder表单生成器
     功能描述在使用FastAdmin一键生成CRUD后,默认的生成的都是原生HTML的组件代码,会有许多不熟悉前端的小伙伴改动起来会比较费劲。其实在FastAdmin中有一个简单的FormBuilder,但是它只能生成一些简单的文本框或下拉框,像FastAdmin中常用的动态下拉框、城市选择框、联动框,它就没法实......