{DAY 21} Pandas 学习笔记part.7

前言

这篇文章会进到资料的合并,
通常在处理资料的时候并不会只出现一笔
会需要同时处理很多比有关联的资料
这时候会资料的合并就很重要!

也是会继续利用kaggle上的开源资料进行更多的pandas练习

Kaggle: Your Machine Learning and Data Science Community

看的课程也是Coursera上的 Introduction to Data Science in Python

Coursera | Online Courses & Credentials From Top Educators. Join for Free | Coursera

练习是利用上述课程里教的搭配以前在学校学过的知识

并且使用kaggle实际的资料档整理出来的笔记

资料表的合并

合并资料表也是常用的资料分析处理手法,有垂直合并也有水平合并

在合并表格的时候会使用到SQL关连式资料库的架构概念

outer join可以想成是文式图的联集

也就是想要的资料是两者全部的资料

A和B全部

而inner join可以想成是文式图的交集

只想要两个资料里重复出现的资料

现在来建立两个Dataframe,练习资料的合并

import pandas as pd

# 首先建立一个关於商店等级的dataframe
level_df = pd.DataFrame([{"Name":"muroom","Level":"gold"},
                        {"Name":"niconico","Level":"silver"},
                        {"Name":"littlestar","Level":"copper"}])
# 将index设为商店名称
level_df = level_df.set_index("Name")
#再建立一个关於商店贩售的商品性质的dataframe
type_df = pd.DataFrame([{"Name":"muroom","Type":"accessories"},
                        {"Name":"thisthing","Type":"housewear"},
                        {"Name":"littlestar","Type":"clothes"}])
type_df = type_df.set_index("Name")

# 印出看看分别长怎样
print(level_df.head())
print(type_df.head())

可以看到上面资料有重叠的部分,

muroom跟littlestar在两笔资料内都有出现

而两笔资料相关连的点就是栏位名称都使用了"Name"

如果我现在想得到两笔资料的联集,也就是两笔资料完全的合并

就会使用到outer join

pd.merge(level_df, type_df, how="outer", left_index=True, right_index=True)

可以看到因为level_df里没有thisthing这家店,

所以显示NaN,

而Type里的niconico出现NaN也是同样的原因

现在若是想要得到两笔资料里共同出现的店家资料

可以使用inner join

只需要把how的attrbute改成inner

pd.merge(level_df, type_df, how="inner", left_index=True, right_index=True)

可以看到使用这个方法後合并的资料只会出现两笔资料里共同都有的店家

也就是muroom&littlestar

现在若是只想要在店家等级的dataframe里加上店家贩售的商品资讯

会使用到left join

把how的attrbute改成"left"

可以想成把要加入的新资料表放在右边,原始的资料表放在左边

left join就是把右边的新资料表『往左边放』的概念

这左右边的概念可以应用在参数摆放的位置,第一个摆放的就是左边不动的资料,第二个摆放的是右边要加入的资料

pd.merge(level_df, type_df, how="left", left_index=True, right_index=True)

可以看到成功的将店家的等级资料表加上贩售的商品性质

另外一种方法是right join
可以想成我们想在店家贩售的商品性质表格内加上该店家的等级
想成把店家等级的资料表放在右边,店家贩售的商品性质表格资料表放在左边

right join就是把左边的新资料表『往右边放』的概念

右边的概念可以应用在参数摆放的位置,第一个摆放的就是想要加入的资料,第二个摆放的是不动的资料

pd.merge(level_df, type_df, how="right", left_index=True, right_index=True)

也有另外一种的合并方法,

使用“on"这个参数

on需要放的值是两个资料表共同拥有的栏位名称

类似SQLite的joinkey的概念

先将原本改过的index变回原始的default value,

使用 .reset_index()

level_df = level_df.reset_index()
type_df = type_df.reset_index()

print(level_df)
print(type_df)

现在index变回原始的default values

现在使用merge加上参数on将两笔资料合并

pd.merge(level_df, type_df, how="right", on="Name")

以上说明的是资料的水平合并

在pandas里也有资料的垂直合并

使用到的是.concat()这个语法

在这里就不多加介绍

要使用的话也是可以去stakeoverflow上

根据想要使用的情境查询相关语法

小结

今天练习的资料操作

很多跟SQL学到的概念重叠

像是inner join,outer join, left,right join这种

可以发现在资料科学的世界里

很多概念是连贯在一起


<<:  [Day 18] 阿嬷都看得懂的 CodePen 怎麽用

>>:  图的基本介绍 - DAY 19

Day 19 民生公共物联网资料应用竞赛,产品设计讨论过程分享

来找设计师一起 side project,前後端 / UIUX 皆可ㄛ。配对单连结: https:...

【Day15】公园跟你家院子—全域变数与区域变数的区别

JavaScript的变数依使用的切分范围(作用域)可以分为两种: 区域变数 全域变数 前面提到透...

Windows系统权限--传说的至高无上SYSTEM和虚拟高阶TrustedInstaller

今天要分享Windows各种的帐户权限,因为我们在修改一些较深层的登录档(例如第8天的第六点更改系统...

Day-14 请说明 Ruby 中的 self 是什麽意思?

我们常常会在程序里看到 self 这个字,但是他到底是什麽?初心者一定困惑的一个字。 我觉得在 R...

[Day-28] R语言 - 分群应用(五) 分群预测 - 提升模型准确度 ( Improve Model Accuracy by Clustering in R.Studio )

您的订阅是我制作影片的动力 订阅点这里~ 若内容有误,还请留言指正,谢谢您的指教 ...