pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False,
copy=True)
我觉得concat中要与join和merge分别开来最重要的参数就是ignore_index,因为这个合并和index(索引)的关系密切。其中的join默认为"outer"表明,进行外连接,而"inner"表明进行内连接。
例如:
In [1]: df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
...: 'B': ['B0', 'B1', 'B2', 'B3'],
...: 'C': ['C0', 'C1', 'C2', 'C3'],
...: 'D': ['D0', 'D1', 'D2', 'D3']},
...: index=['a', 'c', 'b', 'd'])
...:
In [2]: df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
...: 'B': ['B4', 'B5', 'B6', 'B7'],
...: 'C': ['C4', 'C5', 'C6', 'C7'],
...: 'D': ['D4', 'D5', 'D6', 'D7']},
...: index=[4, 5, 6, 7])
In [4]: frames = [df1, df2]
In [5]: pd.concat(frames)
Out[5]:
A B C D
a A0 B0 C0 D0
c A1 B1 C1 D1
b A2 B2 C2 D2
d A3 B3 C3 D3
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
In [39]: pd.concat([df1,df1])
Out[39]:
A B C D
a A0 B0 C0 D0
c A1 B1 C1 D1
b A2 B2 C2 D2
d A3 B3 C3 D3
a A0 B0 C0 D0
c A1 B1 C1 D1
b A2 B2 C2 D2
d A3 B3 C3 D3
In [40]: pd.concat([df1,df1],ignore_index=True)
Out[40]:
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 A0 B0 C0 D0
5 A1 B1 C1 D1
6 A2 B2 C2 D2
7 A3 B3 C3 D3
注意三个函数的输出,默认ignore_index=False,此时后面的DataFrame中的索引直接拼接在后面,而ignore_index=True的时候,后面的索引直接全部改变成数字。
如果在axis=1的情况下进型concat
In [49]: pd.concat([df1,df2],axis=1)
Out[49]:
A B C D A B C D
a A0 B0 C0 D0 NaN NaN NaN NaN
c A1 B1 C1 D1 NaN NaN NaN NaN
b A2 B2 C2 D2 NaN NaN NaN NaN
d A3 B3 C3 D3 NaN NaN NaN NaN
4 NaN NaN NaN NaN A4 B4 C4 D4
5 NaN NaN NaN NaN A5 B5 C5 D5
6 NaN NaN NaN NaN A6 B6 C6 D6
7 NaN NaN NaN NaN A7 B7 C7 D7
In [50]: pd.concat([df1,df2],axis=1,ignore_index=True)
Out[50]:
0 1 2 3 4 5 6 7
a A0 B0 C0 D0 NaN NaN NaN NaN
c A1 B1 C1 D1 NaN NaN NaN NaN
b A2 B2 C2 D2 NaN NaN NaN NaN
d A3 B3 C3 D3 NaN NaN NaN NaN
4 NaN NaN NaN NaN A4 B4 C4 D4
5 NaN NaN NaN NaN A5 B5 C5 D5
6 NaN NaN NaN NaN A6 B6 C6 D6
7 NaN NaN NaN NaN A7 B7 C7 D7
其中我觉得最重要的就是,concat进行连接的时候,索引相同的进行合并。
join_axes表明需要留下的索引。
In [63]: pd.concat([df1,df2],axis=1,join_axes=[pd.Index(['a',4])])
Out[63]:
A B C D A B C D
a A0 B0 C0 D0 NaN NaN NaN NaN
4 NaN NaN NaN NaN A4 B4 C4 D4
append是concat的简略形式,只不过只能在axis=0上进行合并
df1.append(df2),df1.append(df2,ignore_index=True)
DataFrame和Series进行合并的时候需要使用参数ignore_index=True或者含有属性name,因为Series是只有一维索引的。
In [72]: df1.append(df2,ignore_index=True)
Out[72]:
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 1 2 3 4
如果不添加参数ignore_index=True,那么会出错的。