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。

        我们在拼接数据后,接下来就会用列名引用数据,但是一旦列名变了,而我们不知道,就导致引用错误,所以在拼接后需要注意下列名的变化问题。

04-01 20:30