Python学习-两个数据表的合并方法(merge)

本文详细介绍了Pythonpandas库中的merge函数,如何通过列或索引进行数据表的左右合并,以及各种合并类型(如left,right,outer,inner)的使用方法和参数解释。
部署运行你感兴趣的模型镜像

merge函数:

        Python牛马界的神奇数据表合并方法

适用场景:

        通过两个数据表的某列,进行匹配,将两个数据表拼接在一起

适用的库:

pandas

基本语法:

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None,

             left_index=False, right_index=False, sort=True,

             suffixes=('_x', '_y'), copy=True, indicator=False,

             validate=None)

参数说明:

        left:要合并的DataFrame对象,一般可称作左表

        right:要合并的DataFrame对象,一般可称作右表

        how:合并的类型,使用的合并类型不同,获取到的结果也不同,例如:

  •                 left/right:以左(右)表的键为主,值得注意的是,一般通过left(right)合并,
    •                                 得到的数据表行数,只会和左(右)表的行数一致,若有超出的情况,
      •                                 则需要查看是否有左(右)表一个键对应右(左)表多个键的情况
        •                 outer:以左右两表的键为主
          •                 inner:以左右两个表中都包含的键为主
            •         on:合并键的列名,即左右表中都存在的列
              •         left_on/right_on:左(右)表中的作为合并键的列名
                •         left_index/right_index:是否将索引作为合并的键,布尔值
                  •         sort:是否根据合并键对合并后的数据进行排序,布尔值(默认为True)
                    •         suffixes:元组,如果左右两个表存在相同的列名时,给列名添加后缀(默认添加'_x','_y')
                      •         copy:是否返回新对象(默认为True),否返回对输入值的引用,布尔值
                        •         indicator:是否添加一个 '_merge' 的输出列,标注每一行的原始数据来源
                          •                         ('left_only'、'right_only'、'both'),布尔值
                            •         validate:用于检查合并是否满足特定条件的字符串或可调用对象
                • 实例一:left合并方式

                  • 代码如下所示:
                    • import pandas as pd
                      
                      # 创建两个示例数据框
                      df1 = pd.DataFrame({
                          'A': ['北京','南京', '新疆'],
                          'B': ['甲', '乙', '丙']
                      })
                      
                      df2 = pd.DataFrame({
                          'C': ['上海','北京', '新疆'],
                          'D': ['甲', '乙', '丙']
                      })
                      
                      #这种用法下df1为左表,df2为右表,左匹配不到的行自动填充为nan
                      merged_df = df1.merge(df2,left_on = 'A',right_on='C',how='left')
                      print(merged_df)
                      

                         结果:

  •                 

实例二:right合并方式

代码如下所示:

import pandas as pd

# 创建两个示例数据框
df1 = pd.DataFrame({
    'A': ['北京','南京', '新疆'],
    'B': ['甲', '乙', '丙']
})

df2 = pd.DataFrame({
    'C': ['上海','北京', '新疆','河北'],
    'D': ['甲', '乙', '丙','丁'],

})

#这种用法下df1为左表,df2为右表,左匹配不到的行自动填充为nan
merged_df = df1.merge(df2,left_on = 'A',right_on='C',how='right')
print(merged_df)

结果:

就说这叭,累了,剩下的你还是自己试试叭

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

以下是几种使用 Python 实现两个有序链序列合并的代码和方法: ### 列融合方法 ```python class Node: def __init__(self, value): self.value = value self.next = None class LinkedList: def __init__(self, root=None): self.root = root @classmethod def from_list(cls, values): dummy = Node(0) current = dummy for value in values: current.next = Node(value) current = current.next return cls(dummy.next) def __str__(self): result = [] current = self.root while current: result.append(str(current.value)) current = current.next return " ".join(result) def merge_linked_lists(list1, list2): # 创建一个哑节点作为合并后链的头节点 cur = pre_root = Node(0) list1_node, list2_node = list1.root, list2.root # 迭代比较两个的节点值,将较小的节点连接到合并后的链中 while list1_node is not None and list2_node is not None: if list1_node.value <= list2_node.value: cur.next = list1_node list1_node = list1_node.next else: cur.next = list2_node list2_node = list2_node.next cur = cur.next # 将剩余的节点连接到合并后的链中 if list1_node is not None: cur.next = list1_node if list2_node is not None: cur.next = list2_node return LinkedList(root=pre_root.next) l1 = LinkedList.from_list([1, 2, 4]) l2 = LinkedList.from_list([1, 3, 4, 5]) l3 = merge_linked_lists(l1, l2) print(l3) ``` 此方法通过创建一个哑节点作为合并后链的头节点,迭代比较两个的节点值,将较小的节点连接到合并后的链中,最后将剩余的节点连接到合并后的链末尾 [^2]。 ### 标准求解【直接合并】 ```python # Definition for singly-linked list. class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class Solution: def mergeTwoLists(self, list1, list2): res = ListNode() ans = res while list1 != None and list2 != None: if list1.val <= list2.val: ans.next = list1 list1 = list1.next else: ans.next = list2 list2 = list2.next ans = ans.next if list1 == None: ans.next = list2 else: ans.next = list1 return res.next ``` 该方法同样是通过迭代比较两个节点值,将较小值的节点依次连接起来,最后处理剩余节点 [^4]。 ### 列合并法(PTA 相关) ```python list1 = [int(x) for x in input().split() if x != '-1'] list2 = [int(s) for s in input().split() if s != '-1'] list_merged = list1 + list2 list_merged.sort() if len(list_merged) == 0: print('NULL') else: for i in list_merged[:-1]: print(i, end=' ') print(list_merged[-1]) ``` 此方法先将输入的两个有序链数据分别存储为列合并两个后进行排序,再按要求输出结果 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

need help

洒水啦啦啦啦啦啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值