数据合并操作分类
pd.merge()和DataFrame.join():数据库风格的连接操作
pd.concat()和pd.append():多个对象的堆叠
Series.combine_first()和DataFrame.combine_first():用参数对象中的数据为调用者对象中数据打补丁
问3个问题
连接方式是什么?
键是哪个?
键唯一吗?
数据合并类型分类
多是指作为连接列的属性值是否唯一,不重复
只要记住多对多是相同属性值部分的笛卡尔积就行
pd.merge()
注意其默认参数
指定连接键的4种方式:
未指定连接键,以列名的交集作为连接键
left和right需连接的键有相同的列名,使用on参数
left和right需连接的键有不同的列名,但有相同类型的属性值,使用left_on和right_on参数
使用Index(row label)作为连接键,使用left_index和right_index参数
数据库的连接方式:
inner连接--表A与表B的交集
left 连接--表A + (表A与表B的交集)
right 连接--表B + (表A与表B的交集)
outer连接--表A和表B的并集
inner连接--表A与表B的交集:
连接键都唯一,即一对一
连接键一个唯一另一个不唯一,即多对一
连接键都不唯一,即多对多
left 连接--表A + (表A与表B的交集)
连接键都唯一,即一对一
连接键一个唯一另一个不唯一,即多对一
连接键都不唯一,即多对多
right 连接--表B + (表A与表B的交集)
连接键都唯一,即一对一
连接键一个唯一另一个不唯一,即多对一
连接键都不唯一,即多对多
outer连接--表A和表B的并集
连接键都唯一,即一对一
连接键一个唯一另一个不唯一,即多对一
连接键都不唯一,即多对多
DataFrame.join()
on:Column(s) in the caller to join on theindex in other, otherwise joins index-onindex
水平拼接
pd.append()
A useful shortcut toconcat are the append instance methods on Series andDataFrame. These methods actually predated concat. They concatenate along axis=0, namely the index
垂直拼接
pd.concat()
可以指定方向
pandas中DataFrame做差过滤
方法一:所有列名相同
df3=df1.append(df2).append(df2).drop_duplicates(subset=[“state”,”pop”],keep=False)
keep=False表示丢弃所有的重复项
方法二:某一列名相同
df3=merge(df1,df2,how=”left”,on=”column_name”)
df3=df3[df3.isnull().T.any()]
# 或者df3=df3[df3.isnull().any(axis=1)]
df3要有与df1不同的列名,同时相同的列名会自动加后缀区分