IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Pandas数据分析13——数据框合并(实现excel的Vlookup功能) -> 正文阅读

[人工智能]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)

?


数据连接 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)

#列连接 
df2=pd.DataFrame({'x':[5,6,0],'y':[7,8,80]})
pd.concat([df1,df2],axis=1)

取交集

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

#指定索引
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')

?索引连接

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

?多键连接

#多键连接
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'])

?

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

#连接方法
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')

?


?#连接指示 indicator

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


?案例

实现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

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

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

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

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

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

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

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

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

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:44:55  更:2022-08-06 10:47:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/19 21:14:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码