Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

参考书目:《深入浅出Pandas:利用Python进行数据处理与分析》

pandas数据框有时候我们需要合并,对多个数据框一起操作。pandas里面有很多用法,了解一下

导入包

import numpy as np
import pandas as pd

append()

append和列表的用法一样,直接在数据框后面追加

df.append(self,other,ignore_index=False,#重置索引
         verify_integrity=False,sort=False)
df1=pd.DataFrame({'x':[1,2],'y':[3,4]})
df2=pd.DataFrame({'x':[5,6],'y':[7,8]})
df3=pd.DataFrame({'z':[1,2],'y':[3,4]})
df1.append(df3,ignore_index=True)
#追加一条数据
df1.append({'x':31,'y':90},ignore_index=True)

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

数据连接 pd.concat()

concat用法会多一些,下面是他的参数

pd.concat(obj ,axis=0,join='outer',#inner交集,outer并集
          ignore_index=False,keys=None,#连接关系
          levels=None,names=None,#索引名称
          sort=False,verify_integrity=False,copy=True)

基本用法

#行连接
pd.concat([df1,df2])
pd.concat([df1,df2],axis=0)

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)
#列连接
df2=pd.DataFrame({'x':[5,6,0],'y':[7,8,80]})
pd.concat([df1,df2],axis=1)

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

取交集

pd.concat([df1,df2],axis=1,join='inner') #默认并集outer

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)
#指定索引
pd.concat([df1,df2],keys=['a','b'])
pd.concat({'a':df1,'b':df2})
pd.concat([df1,df2],axis=1,keys=['a','b'])

多个文件合并

### 多文件合并  process_your_file处理文件为df
frames=[process_your_file(f) for f in files ]
result = pd.concat(frames)

#一个包含多个 Sheet 的 Excel 合并成一个 DataFrame
dfm = pd.read_excel('team.xlsx', sheet_name=None)
pd.concat(dfm.values())
pd.concat(dfm) # 保留 Sheet 名作为一级索引

文件目录合并

#文件目录合并
import glob   # 取出目录下所有 xlsx 格式文件
files = glob.glob("data/*.xlsx")
cols = ['记录ID', '开始时间', '名称'] # 只取这些列
列表推导出对象
dflist = [pd.read_excel(i, usecols=cols) for i in files]
df = pd.concat(dflist) # 合并

map操作

#map操作  # 逐一读取多个文件,合并
pd.concat(map(pd.read_csv, ['data/d1.csv','data/d2.csv','data/d3.csv']))
pd.concat(map(pd.read_excel, ['data/d1.xlsx','data/d2.xlsx','data/d3.xlsx']))
目录下所有文件
from os import listdir
filepaths = [f for f in listdir("./data") if f.endswith('.csv')]
df = pd.concat(map(pd.read_csv, filepaths))

方法 2
import glob
df = pd.concat(map(pd.read_csv, glob.glob('data/*.csv')))
df = pd.concat(map(pd.read_excel, glob.glob('data/*.xlsx')))

数据合并pd.merge()

merge用法更多了,可以根据关键词来进行合并,并且可以实现excel表的VLOOKUP函数的功能。

基本参数说明

pd.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)

”’how:连接方式,默认为inner,可设为inner/outer/left/right
on:根据某个字段进行连接,必须存在于两个DateFrame中(若未同时存在,则需要分别使用left_on 和 right_on 来设置)
left_on:左连接,以DataFrame1中用作连接键的列
right_on:右连接,以DataFrame2中用作连接键的列
left_index:bool, default False,将DataFrame1行索引用作连接键
right_index:bool, default False,将DataFrame2行索引用作连接键
sort:根据连接键对合并后的数据进行排列,默认为True
suffixes:对两个数据集中出现的重复列,新数据集中加上后缀 _x, _y 进行区别”’

基本用法

left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                     'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']})

right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                      'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3']})

pd.merge(left, right, on='key')

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

索引连接

#索引连接
pd.merge(left.set_index('key'), right.set_index('key'), left_index=True,right_index=True)

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

多键连接

#多键连接
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
                     'key2': ['K0', 'K1', 'K0', 'K1'],
                     'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
                      'key2': ['K0', 'K0', 'K0', 'K0'],
                      'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3']})

pd.merge(left, right, on=['key1', 'key2'])

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

连接方法——可以以一个文件夹的键为基准,也可以取交集或者并集

#连接方法
pd.merge(left, right, how='left', on=['key1', 'key2'])# 以左为表基表
pd.merge(left, right, how='right', on=['key1', 'key2'])# 以右为表基表
pd.merge(left, right, how='outer', on=['key1', 'key2'])# 取两个表的并集
pd.merge(left, right, how='inner', on=['key1', 'key2'])# 取两个表的交集
#下边是一个有重复连接键的例子:
left = pd.DataFrame({'A': [1, 2], 'B': [1, 2]})
right = pd.DataFrame({'A': [4, 5, 6], 'B': [2, 3, 4]})
pd.merge(left, right, on='B', how='outer')

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

连接指示 indicator

#连接指示 indicator
#如果设置 indicator 为 True, 则会增加名为 _merge 的一列,显示这列是多何而来
pd.merge(left, right, on='B', how='outer', indicator=True)

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

案例

实现excel的vlookup功能,对售卖记录进行不同售卖产品的售卖价格查询合并,并计算总销售额
首先随机生成订单表格和价格表格

import random
sale=np.random.randint(2,20,size=(100))
sale_kind=[]
for i in range(100):
    sale_kind.append(random.choice(['香蕉','苹果','橘子','西瓜','葡萄','草莓','芒果','西柚']))
data=pd.DataFrame({'售卖种类':sale_kind,'售卖数量':sale})
data

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

整了8个水果,随机生成了他们的100条销售记录

#随机生成价格表
price=pd.DataFrame(['香蕉','苹果','橘子','西瓜','葡萄','草莓','芒果','西柚'],columns=['水果种类'])
price['水果价格']=abs(np.random.randn((len(price)),1))*10
price

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

随机生成的价格,,,我也不知道现在水果多少钱一斤。

计算每条记录的销售额,左边是销售记录,因此合并时,以左边的数据为基准。将右边的价格都一一加入数据框。然后对应的价格乘上售卖数量,生成新的一列销售额。

pd.merge(data, price ,how='left',left_on='售卖种类',right_on='水果种类').assign(销售额=lambda d:d.售卖数量*d.水果价格)

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

拿出销售额这一列,求和。

#计算销售额
pd.merge(data, price ,how='left',left_on='售卖种类',right_on='水果种类').assign(销售额=lambda d:d.售卖数量*d.水果价格)['销售额'].sum(0)

Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

还是很方便的。merge()数据合并规则还是很复杂的,要根据具体情况使用

Original: https://blog.csdn.net/weixin_46277779/article/details/126156903
Author: 阡之尘埃
Title: Pandas数据分析13——数据框合并(实现excel的Vlookup功能)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/676846/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 千元以内有什么蓝牙耳机推荐?最值得购买的四款蓝牙耳机推荐

    性价比高质量又好的蓝牙耳机款式当然有不少,特别在今年2021年的蓝牙耳机可是非常之多,所以对于想购入蓝牙耳机的小伙伴就有很多疑问,不过好在我最近罗列了在2021年之中非常值得购买的…

    人工智能 2023年5月25日
    071
  • 第一张TCP/IP协议

    一 什么是tcp/ip二 什么是协议三 TCP和IP分别是什么四 网络拓扑结构的类型 一 什么是tcp/ipTCP/IP协议(Transfer ControlnProtocol/I…

    人工智能 2023年6月26日
    093
  • Matlab实现季节性时间序列ARIMA模型预测

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    人工智能 2023年6月13日
    087
  • 目标检测算法——YOLOv5/YOLOv7改进之结合NAMAttention(提升涨点)

    >>>深度学习Tricks,第一时间送达<<< 目录 NAMAttention,一种新的注意力计算方式,无需额外的参数! (一)前沿介绍 1.N…

    人工智能 2023年7月27日
    053
  • 计算机视觉-OpenCV入门讲解

    🎉 作者简介:在读计算机研究生,目前研二。主要研究方向是人工智能和群智能算法方向。目前熟悉python网页爬虫、机器学习、计算机视觉(OpenCV)、群智能算法目前正在学习深度学习…

    人工智能 2023年6月25日
    093
  • 人工智能基础整理

    人工智能基础整理 考前复习 随便整了一下 填空题 目前人工智能的主要学派有三家: 符号主义、 进化主义、 连接主义 知识图谱本质上是 结构化的语义知识库,是一种由节点和边组成的 图…

    人工智能 2023年6月10日
    079
  • 深度学习关于数据集的六大问题

    问题一:数据集太小 如果数据集太小,模型将没有足够样例概括来区分特征。这将使数据过拟合,从而出现训练误差低但测试误差高的情况。 解决方案1 尝试找到更多和原始数据集来源相同的数据。…

    人工智能 2023年5月26日
    0112
  • Matlab绘图(1)——二维绘图

    Matlab绘图(1)——二维绘图 Matlab基础系列教程传送门:Matlab基础(0)——命令行常用指令Matlab基础(1)——基础知识Matlab基础(2)——向量与多项式…

    人工智能 2023年7月14日
    095
  • 【Java】关于Maven仓库地址

    Maven仓库地址 仓库 如果你没有配置阿里云仓库镜像源,可以到这里来找 https://mvnrepository.com/ 如果你配置了阿里云仓库镜像源,可以来这里找 http…

    人工智能 2023年6月4日
    093
  • 【使用华为云MindSpore框架实现目标分类___实验报告(二)】

    码字不易,收藏之余,别忘了给我点个赞吧! ———Start 使用华为云MindSpore框架实现目标分类___实验报告(二) 华为云MindSp…

    人工智能 2023年7月1日
    0114
  • 【人工智能】Mindspore框架中保存加载模型

    前言 MindSpore着重提升易用性并降低AI开发者的开发门槛,MindSpore原生适应每个场景包括端、边缘和云,并能够在按需协同的基础上,通过实现AI算法即代码,使开发态变得…

    人工智能 2023年7月28日
    060
  • NLP6:stanford Parser中文分词

    NLP实验六:stanford Parser中文分词 一、实验内容 二、实验前准备 * 2.1下载安装前需要配置好电脑的JDK 2.2可视化工具 三、实验内容 * 1.安装配置St…

    人工智能 2023年6月1日
    079
  • sklearn实现随机森林(分类算法)

    阿喽哈~小伙伴们,今天我们来唠一唠随机森林 ♣ ♣ ♣ 随机森林应该是很多小伙伴们在学机器学习算法时最先接触到的集成算法,我们先简单介绍一下集成学习的大家族吧: Bagging:个…

    人工智能 2023年7月3日
    0120
  • carla–使用python进行carla交互仿真

    python进行CARLA仿真 1. CARLA简介 CARLA是一个开源的自动驾驶仿真工具,CARLA以Unreal Engine为基础来运行模拟,并使用OpenDRIVE标准来…

    人工智能 2023年6月2日
    084
  • 数据挖掘入门

    挖掘对象 挖掘步骤 分析方法 常用算法 神经网络法 决策树法 遗传算法 粗糙集法 模糊集法 关联规则法 面对的挑战 不知不觉就步入了研究生的大门,蓦然回首,大学四年时光如流水,正如…

    人工智能 2023年7月17日
    068
  • 什么是数据挖掘?数据挖掘的目标是什么?

    数据挖掘绪论 什么是数据挖掘 数据挖掘要解决的问题是什么? 数据挖掘的任务 * 预测建模 关联分析 聚类分析 异常检测 什么是数据挖掘 并非所有的信息发现任务都被视为数据挖掘。例如…

    人工智能 2023年6月19日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球