pandas中的concat和append

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,那么会出错的。

你可能感兴趣的:(python)