pandas中,concat和merge都可以用来拼接数据,但是这两个方法有什么区别呢,常规的区别今天暂且不提,主要分享一个我近期发现的区别,主要是针对两个df有重名的列的情况,先看concat
import pandas as pd
df1 = pd.DataFrame({
'a':[1,2,3,4,5],
'b':[1,2,3,4,5],
'c':[1,2,3,4,5],
})
df2 = pd.DataFrame({
'a':[1,2,3,4,5],
'b':[1,2,3,4,5],
'c':[1,2,3,4,5],
})
df3 = pd.concat([df1,df2],axis=1)
df3
输出
a b c a b c
0 1 1 1 1 1 1
1 2 2 2 2 2 2
2 3 3 3 3 3 3
3 4 4 4 4 4 4
4 5 5 5 5 5 5
可以看到,当两个df有同名的列的时候,concat不会做任何处理,之前是什么名字,拼接后还是什么名字,再看merge
import pandas as pd
df1 = pd.DataFrame({
'a':[1,2,3,4,5],
'b':[1,2,3,4,5],
'c':[1,2,3,4,5],
})
df2 = pd.DataFrame({
'a':[1,2,3,4,5],
'b':[1,2,3,4,5],
'c':[1,2,3,4,5],
})
df3 = pd.merge(df1,df2,on='a',how='left')
df3
输出
a b_x c_x b_y c_y
0 1 1 1 1 1
1 2 2 2 2 2
2 3 3 3 3 3
3 4 4 4 4 4
4 5 5 5 5 5
可以看到,merge会对同名的列进行重命名,而且不论是第一个df,还是第二个df,名字都会被改变,而且规则是,左边的df名字会被加_x,右边的df会加_y。
我们在拼接数据后,接下来就会用列名引用数据,但是一旦列名变了,而我们不知道,就导致引用错误,所以在拼接后需要注意下列名的变化问题。