pandas22 pd.concat轴向连接(或绑定或堆叠)( tcy)

pd.concat轴向连接或绑定或堆叠 2018/12/29

1.函数
====================================================================
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
          keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True)
用途:沿轴执行连接
    # 要连接任意数量的pandas对象(DataFrame或Series)
参数                              #说明
objs                              #序列或数据帧的列表或字典。字典键名用作keys层次化索引(最外层levels[0])
axis=0                           #指明连接的轴
join="outer"                #轴向上的索引是按交集inner还是并集outer进行合并
join_axes=None          #索引对象列表。用于其他n-1轴的特定索引,不执行并集/交集运算
                                     #即选取数据都有的索引进行合并
keys=None                  #连接轴向上的层次化索引。可以是任意值的列表或数组、元组数组、数组列表(如果将levels设置成多级数组的话)
levels =None               #指定层次化索引各级别levels上的索引,必须设置keys外层级别的索引
names=None              #创建分层索引级别levels的名称, 必须设置了keys
verify _integrity=False#是否允许重复索引 ,True如发现则引发异常。默认允许重复
ignore_index=False    #不保留连接轴上的索引, 产生一组新索引range(total_length)
copy=True                  #副本

====================================================================
注意:
concat()制作数据副本,不断重复使用可能会产生重大的性能损失。
如需要对多个数据集使用该操作,请使用列表推导。

frames = [ process_your_file(f) for f in files ]
result = pd.concat(frames)
=============================================================
2.实例
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2'], 'C': ['C0', 'C1', 'C2']})
df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'],'B': ['B3', 'B4', 'B5'],'C': ['C3', 'C4', 'C5']})
df3 = pd.DataFrame({'A': ['A6', 'A7', 'A8'],'B': ['B6', 'B7', 'B8'],'C': ['C6', 'C7', 'C8']})
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6'],'D': ['D2', 'D3', 'D6'],'F': ['F2', 'F3', 'F6']},index=[2,3,4])

# 实例1:axis轴选择
result = pd.concat([df1, df4], sort=False)             #选择axis=0水平方向合并
result1 =pd.concat([df1, df4], axis=1, sort=False)#选择axis=1垂直方向合并

df1      A   B   C               result                                  result1
    0  A0  B0  C0              A   B     C    D      F
    1  A1  B1  C1        0   A0  B0   C0  NaN  NaN             A     B     C    B      D       F
    2  A2  B2  C2        1   A1  B1   C1  NaN  NaN        0   A0   B0   C0  NaN  NaN  NaN
df4       B   D   F        2   A2  B2   C2  NaN  NaN        1   A1   B1   C1  NaN  NaN  NaN
    2  B2  D2  F2        2  NaN  B2  NaN   D2   F2        2   A2   B2   C2   B2   D2      F2
    3  B3  D3  F3        3  NaN  B3  NaN   D3   F3        3  NaN  NaN  NaN   B3   D3   F3
    4  B6  D6  F6        4  NaN  B6  NaN   D6   F6        4  NaN  NaN  NaN   B6   D6   F6
========================================================== 
# 实例2:join 内连接或外连接
# 索引是按交集inner还是并集outer  进行合并;默认join='outer'排序,sort=False不进行排序

result = pd.concat([df1, df4], join='outer',sort=False)  #默认外连接
result1 = pd.concat([df1, df4], join='inner',sort=False)#内连接

df1       A   B   C             result                                   result1
    0  A0  B0  C0             A     B     C    D      F                B
    1  A1  B1  C1        0   A0   B0   C0  NaN  NaN        0  B0
    2  A2  B2  C2        1   A1   B1   C1  NaN  NaN        1  B1
df4       B   D   F        2   A2   B2   C2  NaN  NaN        2  B2
    2  B2  D2  F2        2  NaN  B2  NaN   D2   F2         2  B2
    3  B3  D3  F3        3  NaN  B3  NaN   D3   F3         3  B3
    4  B6  D6  F6        4  NaN  B6  NaN   D6   F6         4  B6
=========================================================== 
# 实例3:join_axes选取数据都有的索引进行合并
pd.concat([df1, df4], axis=1, join_axes=[df1.index])

    A    B    C    B      D      F
0  A0  B0  C0  NaN  NaN  NaN
1  A1  B1  C1  NaN  NaN  NaN
2  A2  B2  C2   B2   D2    F2

pd.concat([df1, df4],  join_axes=[df1.columns])

     A    B     C
0   A0  B0   C0
1   A1  B1   C1
2   A2  B2   C2
2  NaN  B2  NaN
3  NaN  B3  NaN
4  NaN  B6  NaN
===================================================== 

# 实例4:keys行分层索引

frames = [df1, df2, df3]
piece={'x': df1, 'y': df2, 'z': df3}
result = pd.concat(frames)

result1 = pd.concat(frames, keys=['x', 'y', 'z'],names=['key1','key2'])#行分层索引
result1 = pd.concat( piece,names=['key1','key2'])                             #行分层索引等价上面
result1 = pd.concat(piece, keys=['x', 'y','z'],                                       #可任意选取要合并的列,任意放置顺序
                                          names=['key1','key2'])                            #行分层索引等价上面;names为分层索引名称
result1 = pd.concat(piece, keys=['x', 'y', 'z'],names=['key1','key2'],  #行分层索引等价上面
                                          levels=[['x', 'y', 'z', 'w']])                           #levels中要完全包含keys的元素
result1.loc['y']  #选择块y,结果同df2

df1       A   B   C               result                       result1
    0  A0  B0  C0
    1  A1  B1  C1                A   B   C           key1 key2   A   B   C
    2  A2  B2  C2            0  A0  B0  C0            x       0  A0  B0  C0
df2       A   B   C            1  A1  B1  C1                    1  A1  B1  C1
    0  A3  B3  C3            2  A2  B2  C2                    2  A2  B2  C2
    1  A4  B4  C4            0  A3  B3  C3            y      0  A3  B3  C3
    2  A5  B5  C5            1  A4  B4  C4                    1  A4  B4  C4
df3       A   B   C            2  A5  B5  C5                    2  A5  B5  C5
    0  A6  B6  C6            0  A6  B6  C6            z       0  A6  B6  C6
    1  A7  B7  C7            1  A7  B7  C7                    1  A7  B7  C7
    2  A8  B8  C8            2  A8  B8  C8                    2  A8  B8  C8
=====================================================
# 实例5:ignore_index忽略索引
result1 =pd.concat([df1, df4], sort=False)
result1 =df1.append(df4,sort=False) #等价上面
result2 =pd.concat([df1, df4], axis=0, sort=False, ignore_index=True)
result2 =df1.append(df4, ignore_index=True,sort=False)#等价上面
result3 =pd.concat([df1, df4], axis=1, sort=False)
result4 =pd.concat([df1, df4], axis=1, sort=False, ignore_index=True)

result1                                   result2                                 result3                                           result4
     A   B      C    D      F               A   B     C    D      F               A    B      C    B      D      F               0     1      2    3      4       5
0   A0  B0   C0  NaN  NaN     0   A0  B0   C0  NaN  NaN    0   A0   B0   C0  NaN  NaN  NaN     0   A0   B0   C0  NaN  NaN  NaN
1   A1  B1   C1  NaN  NaN     1   A1  B1   C1  NaN  NaN    1   A1   B1   C1  NaN  NaN  NaN     1   A1   B1   C1  NaN  NaN  NaN
2   A2  B2   C2  NaN  NaN     2   A2  B2   C2  NaN  NaN    2   A2   B2   C2      B2   D2   F2      2   A2   B2   C2      B2   D2   F2
2  NaN  B2  NaN   D2   F2     3  NaN  B2  NaN   D2   F2    3  NaN  NaN  NaN   B3   D3   F3     3  NaN  NaN  NaN   B3   D3   F3
3  NaN  B3  NaN   D3   F3     4  NaN  B3  NaN   D3   F3    4  NaN  NaN  NaN   B6   D6   F6     4  NaN  NaN  NaN   B6   D6   F6
4  NaN  B6  NaN   D6   F6     5  NaN  B6  NaN   D6   F6
=======================================================
# 实例6:verify_integrity索引重叠是否忽略
pd.concat(frames, verify_integrity=True)#忽略重叠索引
pd.concat(frames, verify_integrity=True)#ValueError索引具有重叠值
=======================================================
# 实例7:与序列连接
# 实例7.1:
s1 = pd.Series(['a', 'b'])
s2 = pd.Series(['c', 'd'])

result1=pd.concat([s1, s2])
result2=pd.concat([s1, s2],axis=1)
result3=pd.concat([s1, s2], keys=['s1', 's2',],names=['key1','key2'])

# result1  result2        result3
                                  # key1  key2
# 0    a                       # s1     0         a
# 1    b    #     0  1      #          1         b
# 0    c    # 0  a  c      # s2     0          c
# 1    d    # 1  b  d     #          1         d

===================================================== 
# 实例7.2:
s1 = pd.Series(['X0', 'X1', 'X2'], name='X')
result = pd.concat([df1, s1,s1], axis=1)

     A   B    C    X    X
0  A0  B0  C0  X0  X0
1  A1  B1  C1  X1  X1
2  A2  B2  C2  X2  X2

result = pd.concat([df1, s1])

     A     B     C    0
0   A0   B0   C0  NaN
1   A1   B1   C1  NaN
2   A2   B2   C2  NaN
0  NaN  NaN  NaN   X0
1  NaN  NaN  NaN   X1
2  NaN  NaN  NaN   X2
========================================================= 
# 实例7.3:
s3 = pd.Series([0, 1, 2, 3], name='foo')
s4 = pd.Series([0, 1, 2, 3])
s5 = pd.Series([0, 1, 4, 5])

pd.concat([s3, s4, s5], axis=1)

   foo  0  1
0    0  0  0
1    1  1  1
2    2  2  4
3    3  3  5

pd.concat([s3, s4, s5], axis=1, keys=['red','blue','yellow'])
   red  blue  yellow
0    0     0       0
1    1     1       1
2    2     2       4
3    3     3       5

你可能感兴趣的:(pandas)