前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据规整(2)

数据规整(2)

作者头像
python数据可视化之路
发布2023-02-23 21:15:42
7780
发布2023-02-23 21:15:42
举报

1 分层索引(见上一篇文章)

2 联合与合并

(1)数据库风格的联合

数据集的联合将通过一个或多个键进行联合,这些操作与数据库类似。pandas通过merge函数进行联合。

代码语言:javascript
复制
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)})
df2 = pd.DataFrame({'key': ['a', 'b', 'd'], 'data2': range(3)})

依据key列作为联合的标准,语句如下:

代码语言:javascript
复制
pd.merge(df1, df2, on = 'key')

如果对象的列名是不同的,比如df1的联合列名字key改为key1,df2的联合列名字key改为key2,此时语句应为:

代码语言:javascript
复制
pd.merge(df1, df2, left_on = 'key1', right_on = 'key2') 

联合的结果同上一步一样。

默认情况下,merge做的是内连接('inner join'),结果是两个表的交集;其他联合方法还有leftrightouter,传入how参数可以指定联合方法。outer是两个表的并集:

代码语言:javascript
复制
pd.merge(df1, df2, how = 'outer')

how参数的不同连接类型

选项

行为

inner

只对两张表的交集部分联合

outer

两张表的并集

left

对所有左表的键进行联合

right

对所有右表的键进行联合

下面是左连接的一个例子:

代码语言:javascript
复制
pd.merge(df1, df2, how = 'left', on = 'key') #以df1的key列作为连接标准

由结果可知,左连接将左表的连接列全部保留,右表中没有的将会赋值为NaN。右连接相反,将右表的连接列全部保留。

当使用多个键进行合并,传入一个列名列表,即on=['key1', 'key2']。


(2)根据索引合并

在某些情况下,DataFrame用于合并的键是它的索引,在这种情况下,可以传入left_index=Trueright_index=True(或者都传)表示索引需要用来作为合并的键。例如下面语句:

代码语言:javascript
复制
pd.merge(df1, df2, left_on = 'key', right_index = True, how = 'outer')

表示数据合并是依据df1的key列和df2的索引列进行合并。

如果数据是多层索引,例如df1的索引列是key1和key2,则语句应该变为:

代码语言:javascript
复制
pd.merge(df1, df2, left_on = ['key1', 'key2'], right_index = True, how = 'outer')

(3)联合重叠数据

另外的一个数据联合场景,既不是合并操作,也不是连接操作。两个数据集,它们的索引全部或部分相同。

代码语言:javascript
复制
s1 = pd.Series([np.nan, 2.5, 0.3, 5.6, 1.3, np.nan], index = ['a', 'b', 'c', 'd', 'e', 'f'])
s2 = pd.Series([0, np.nan, 2, np.nan, np.nan, 5], index = ['a', 'b', 'c', 'd', 'e', 'f'])

Series有一个combine_first,可以对具有部分或全部的数据集合并:

代码语言:javascript
复制
s1.combine_first(s2)
-----结果-----
a    0.0
b    2.5
c    0.3
d    5.6
e    1.3
f    5.0

由此可见,combine_first相当于根据传入的值进行修补调用对象的缺失值。s1中的a的缺失值被b的0所代替。同样的,DataFrame也有combine_first方法。

本章的数据规整到此结束,目前已经了解了pandas的基础知识,包括数据导入、清洗和重新规整。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python数据可视化之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档