pandas数据合并
使用contact,append,merge完成数据集合并
自己学习用,欢迎大佬指正。
1.concat
pd.concat()可以合并series和DataFrame对象,默认情况为逐行合并,且保留索引
1.1使用concat简单合并两个df
pd.concat([df1,df2])#纵向合并
pd.concat([df1,df2],axis=1)#横向合并
1.2考虑索引的合并:ignore_index
由于concat在合并是会保留索引,即使索引重复
ser1 = pd.Series(['A', 'B', 'C'], index=[1, 2, 3])
ser2 = pd.Series(['D', 'E', 'F'], index=[1, 2, 3])
pd.concat([ser1,ser2])
结果为:
如果使用:
pd.concat([ser1,ser2],ignore_index=True)
结果为:
1.3 dataframe横向简单合并
有时候我们想要简单地合并两张具有同样行数的表格,不想管索引和顺序,但是由于concat合并时会保留索引,所以合并时出现不想要的NAN值。这里有一个暴力的方法:
df2.index=df1.index ##重置表格2的索引
pd.concat([df1,df2],axis=1)
1.4 join的方法合并
可以使用join的方法来进行两个数据集的交集或者并集合并,join=‘outer’(并集),join=‘inner’(交集)
df1=pd.DataFrame({"A":[1,2,3],"B":[2,3,4],"C":[3,4,5]})
df2=pd.DataFrame({"B":[2,3,4],"C":[3,4,5],"d":[3,4,6]})
>>
df1: df2:
A B C B C D
1 2 3 2 3 4
2 3 4 3 4 5
3 4 5 4 5 6
使用交集合并df1和df2
innerdf = pd.concat([df1,df2],join="inner")###可以看到A和D列已经没有了
B C
0 2 3
1 3 4
2 4 5
0 2 3
1 3 4
2 4 5
使用并集合并df1和df2:
pd.concat([df1,df2],join="outer",axis=1)
A B C B C d
0 1 2 3 2 3 3
1 2 3 4 3 4 4
2 3 4 5 4 5 6
2.append
df1.appende(df2)
3.merge
merge的方法类似于SQL语言中的merge,可以一对一链接,也能一对多链接,一对多链接时,会保留重复值。merge还会默认将输入的共同列作为键合并。
3.1用merge简单合并
基本的语法为: pd.merge(df1,df2)
df1=pd.DataFrame({"A":[1,1],"B":[1,3]})
df2=pd.DataFrame({"A":1,"C":2})
pd.merge(df1,df2)#将df2重复之后再合并
>>
A B C
0 1 1 2
1 1 3 2
……未完