2 联合与合并
(1)数据库风格的联合
数据集的联合将通过一个或多个键进行联合,这些操作与数据库类似。pandas通过merge函数进行联合。
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列作为联合的标准,语句如下:
pd.merge(df1, df2, on = 'key')
如果对象的列名是不同的,比如df1的联合列名字key改为key1,df2的联合列名字key改为key2,此时语句应为:
pd.merge(df1, df2, left_on = 'key1', right_on = 'key2')
联合的结果同上一步一样。
默认情况下,merge做的是内连接('inner join'),结果是两个表的交集;其他联合方法还有left,right和outer,传入how参数可以指定联合方法。outer是两个表的并集:
pd.merge(df1, df2, how = 'outer')
how参数的不同连接类型
选项 | 行为 |
---|---|
inner | 只对两张表的交集部分联合 |
outer | 两张表的并集 |
left | 对所有左表的键进行联合 |
right | 对所有右表的键进行联合 |
下面是左连接的一个例子:
pd.merge(df1, df2, how = 'left', on = 'key') #以df1的key列作为连接标准
由结果可知,左连接将左表的连接列全部保留,右表中没有的将会赋值为NaN。右连接相反,将右表的连接列全部保留。
当使用多个键进行合并,传入一个列名列表,即on=['key1', 'key2']。
(2)根据索引合并
在某些情况下,DataFrame用于合并的键是它的索引,在这种情况下,可以传入left_index=True或right_index=True(或者都传)表示索引需要用来作为合并的键。例如下面语句:
pd.merge(df1, df2, left_on = 'key', right_index = True, how = 'outer')
表示数据合并是依据df1的key列和df2的索引列进行合并。
如果数据是多层索引,例如df1的索引列是key1和key2,则语句应该变为:
pd.merge(df1, df2, left_on = ['key1', 'key2'], right_index = True, how = 'outer')
(3)联合重叠数据
另外的一个数据联合场景,既不是合并操作,也不是连接操作。两个数据集,它们的索引全部或部分相同。
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,可以对具有部分或全部的数据集合并:
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的基础知识,包括数据导入、清洗和重新规整。
本文分享自 python数据可视化之美 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!