首页 > 其他分享 >pandas-数据合并和拆分

pandas-数据合并和拆分

时间:2023-09-07 19:12:32浏览次数:31  
标签:right pd df 合并 DataFrame 拆分 key pandas left

pandas-数据合并和拆分

目录

数据集拆分是将一个大型的数据集拆分为多个较小的数据集,可以让数据更加清晰易懂,也方便对单个数据集进行分析和处理。

同时,分开的数据集也可以分别应用不同的数据分析方法进行处理,更加高效和专业。

数据集合并则是将多个数据集合并成一个大的数据集,可以提供更全面的信息,也可以进行更综合的数据分析。

同时,数据集合并也可以减少数据处理的复杂度和时效性,提升数据分析的准确性和结果的可靠性。

数据拆分

拆分行

拆分单行和多行

import pandas as pd

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

拆分列

拆分单行和多行

import pandas as pd

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

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

按条件拆分

import pandas as pd

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

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

数据合并

append

FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version.

data.append(other, ignore_index=False, verify_integrity=False, sort=False)

other             可以是一个 DataFrame,也可以是一个含有多个 DataFrame 的列表
ignore_index      是否对返回的新对象重置索引
verify_integrity  追加的所有数据中存在重复的行索引时,是否报错
sort              是否对追加后返回的新对象进行排序

merge

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

1. how:设置合并的方式,有inner,outer,left,right四种方式。
2. on:依据那个列来合并
def merge(
    left: DataFrame | Series,
    right: DataFrame | Series,
    how: str = "inner",
    on: IndexLabel | None = None,
    left_on: IndexLabel | None = None,
    right_on: IndexLabel | None = None,
    left_index: bool = False,
    right_index: bool = False,
    sort: bool = False,
    suffixes: Suffixes = ("_x", "_y"),
    copy: bool = True,
    indicator: bool = False,
    validate: str | None = None,
    )-> DataFrame
left,right    用于连接的DataFrame
how  merge的四种类型 分别为'inner'、'left'、'right'和'outer'
    'inner'的类型称为内连接,它在拼接的过程中会取两张表的键(key)的交集
    'left'和'right'的merge方式其实是类似的,分别被称为左连接和右连接。
    'outer'是外连接,在拼接的过程中它会取两张表的键(key)的并集进行拼接
on          用于连接列名 必须都存在于两个DataFrame中
left_on     左侧用于连接键的列
right_on    右侧用于连接键的列
left_index  将左侧行索引作为连接键
right_index 将右侧行索引作为连接键
sort        合并后排序
suffixes    用于追加重叠列名的末尾

详细参考:https://zhuanlan.zhihu.com/p/102274476

import pandas as pd
import random

left = pd.DataFrame({'key':list('abcde'),'data1':range(5)})
right = pd.DataFrame({'key': ['a', 'b', 'd'],'data2':range(3,6)})

print('left----------------')
print(left)
print('right----------------')
print(right)
result = pd.merge(left, right)
print('merge----------------')
print(result)

left----------------
  key  data1
0   a      0
1   b      1
2   c      2
3   d      3
4   e      4
right----------------
  key  data2
0   a      3
1   b      4
2   d      5

merge----------------
  key  data1  data2
0   a      0      3
1   b      1      4
2   d      3      5

concat

用于指定合并的轴是行还是列,用于指定合并的轴是行还是列

pandas.concat(objs, *, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=None)


objs     必须是一个包含 DataFrame 或 Series 的列表
axis     默认为 0 ,表示纵向连接
join     合并的时候axis外的索引对其方式: ‘inner’, ‘outer’,默认outer:取并集		

ignore_index    布尔值,默认为False:保留原来对象的索引值;True
keys            添加一级索引,以区分不同的合并对象
levels          构建多层索引

行合并

import pandas as pd

df1 = pd.DataFrame(
    {
        "name": ["xiaohong", "xiaoming"],
        "age": [13, 15],
        "gender": ["bog", "girl"],
    }
)

df2 = pd.DataFrame(
    {
        "name": ["xiaohong", "xiaohua"],
        "age": [13, 15],
        "gender": ["boy", "girl"],
    }
)

df = pd.concat([df1, df2], axis=0)
print(df)
#       name  age gender
#0  xiaohong   13    bog
#1  xiaoming   15   girl
#0  xiaohong   13    boy
#1   xiaohua   15   girl

# 如果数据没有则为None
df3 = pd.DataFrame(
    {
        "name": ["xiaohong", "xiaohua"],
        "age": [13, 15],
        # "gender": ["boy", "girl"],
    }
)

df = pd.concat([df1, df3], axis=0)
print(df)
#       name  age gender
#0  xiaohong   13    bog
#1  xiaoming   15   girl
#0  xiaohong   13    NaN
#1   xiaohua   15    NaN

列合并

import pandas as pd

df1 = pd.DataFrame(
    {
        "name": ["beike", "haixing"],
        "age": [13, 15],
        "gender": ["bog", "girl"],
    }
)

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

df = pd.concat([df1, df2], axis=1)
print(df)
#      name  age gender  score     city
#0    beike   13    bog    100  nanjing
#1  haixing   15   girl     90  beijing

join

在索引或键列上与其他DataFrame连接列。通过传递列表,有效地通过索引连接多个DataFrame对象。

DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

other: DataFrame,具有名称字段集的Series,或DataFrame列表 索引
on:    name,tuple / names 列表或array-like调用者中的列或索引级别名称,用于连接其他索引
How:{'left','right','outer','inner'},默认:'left'

lsuffix: string 使用左框架重叠列的后缀
rsuffix: string 使用右框架重叠列的后缀
import pandas as pd

pd1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4'],
                        'A': ['A0', 'A1', 'A2', 'A3', 'A4']})
print(pd1)
#  key   A
#0   K0  A0
#1   K1  A1
#2   K2  A2
#3   K3  A3
#4   K4  A4

pd2 = pd.DataFrame({'key': ['K0', 'K1', 'K2'],
                       'B': ['B0', 'B1', 'B2']})
print(pd2)
#  key   B
#0   K0  B0
#1   K1  B1
#2   K2  B2

#1.使用索引加入DataFrames
pd3=pd1.join(pd2, lsuffix='_a', rsuffix='_b')
print(caller)
#  key_a   A key_b    B
#0    K0  A0    K0   B0
#1    K1  A1    K1   B1
#2    K2  A2    K2   B2
#3    K3  A3   NaN  NaN
#4    K4  A4   NaN  NaN

# 设置索引进行添加
pd4=pd1.set_index('key').join(pd2.set_index('key'))
print(pd4)
#      A    B
#key
#K0   A0   B0
#K1   A1   B1
#K2   A2   B2
#K3   A3  NaN
#K4   A4  NaN

# 保留原先索引
pd5=pd1.join(pd2.set_index('key'), on='key')
print(pd5)
#  key   A    B
#0  K0  A0   B0
#1  K1  A1   B1
#2  K2  A2   B2
#3  K3  A3  NaN
#4  K4  A4  NaN

参考资料

https://www.cjavapy.com/article/599/

https://mp.weixin.qq.com/s/36338fBQF6NrBQmywKHxaA

https://www.cnblogs.com/wang_yb/p/17602491.html

标签:right,pd,df,合并,DataFrame,拆分,key,pandas,left
From: https://www.cnblogs.com/tian777/p/17685845.html

相关文章

  • Python的pandas库:数据分析工具
    在Python的数据分析领域,pandas库是一个非常强大的工具。它提供了一种灵活的数据结构,可以帮助我们轻松地处理和分析数据。本文将详细介绍pandas库的主要功能和用法,并通过具体案例进行说明。安装与导入首先,确保已经安装了pandas库。如果尚未安装,可以使用以下命令在Python环境中安装:pi......
  • [EasyExcel] 导出合并单元格
    前言使用springboot对excel进行操作在平时项目中要经常使用。常见通过jxl和poi的方式进行操作。但他们都存在一个严重的问题就是非常的耗内存。这里介绍一种EasyExcel工具来对excel进行操作。一、EasyExcel是什么?EasyExcel是阿里巴巴开源的一个excel处理框架,以使用......
  • cmd合并多个txt到一个
    copy*.txt1.txt......
  • 一个目录压缩成多个 tar.gz 包,并在解压时自动合并它们到一个目录
    将一个目录压缩成多个tar.gz包,并在解压时自动合并它们到一个目录。这可以通过使用split命令和一些脚本来实现。以下是一个示例的步骤:压缩目录并拆分成多个tar.gz文件:tarczvf-your_directory/|split-b100M-d-a3-your_archive.tar.gz.tarczvf-your_dir......
  • Pandas中的to_datetime函数用法
    Pandas中的to_datetime函数用法importdatetimeimportpandasaspdimportnumpyasnp将字符串转换为日期时间:pd.to_datetime('2023-09-06')Timestamp('2023-09-0600:00:00')将多个字符串转换为日期时间:pd.to_datetime(['2023-09-06','2023-09-07'......
  • 原创软件 | 第3期:PDF合并分割助手V1.0(个人免费)
    这是一个短的“发布会”。 01基本介绍近期开发了一个【PDF合并分割助手】。它是一个实现pdf快速合并、分割的免费软件。你拥有以下7种选项设置。>>合并选项<<1保留书签,顶层书签以pdf文件名(不含“.pdf”)构建2保留原始书签,顶层书签与源文档相同3纯合并内容,丢弃所有源文......
  • vue3.0 el-table 动态合并单元格
    <el-tablev-resize:34style="margin:10px010px":data="tableData":header-cell-style="{background:'#F6F6F6',height:'10px','text-align':'center'}":......
  • Python 字典的合并和值相加
    python实现:字典的合并(相同key的value相加)及字典的输出排序(各种意义下)_python字典合并与排序_Roxannekkk的博客-CSDN博客dict1={'a':2,'b':3}dict2={'a':3,'b':2}dict3={'c':3,'d':7}合并key相同,后一个字典覆盖前一个字典的value;key不同,新增dict1.update(dic......
  • 多个word转化成PDF文件后再合并成一个PDF文件
    """**将多个word文档转化成PDF文件,最后合并成一个PDF文件**"""`importosfromwin32comimportclientfromPyPDF2importPdfMerger#使用PdfMergerdefwordToPdf(folder):#将多个word文档转化成PDF文件os.chdir(folder)file_type='docx&#......
  • 1768. 交替合并字符串
    给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回 合并后的字符串 。 示例1:输入:word1="abc",word2="pqr"输出:"apbqcr"解释:字符串合并情况如......