一、函数介绍和参数含义

比赛中经常用到数据处理,当需要对某些表的列数据进行拼接时则会用到​​concat​​​API,关于直观上的图形拼接栗子可以参考​​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)

其中上面的参数含义为:

  • ​objs​​:Series,DataFrame或Panel对象的序列或映射。如果传递了dict,则排序的键将用作键参数,除非它被传递,在这种情况下,将选择值(见下文)。任何无对象将被静默删除,除非它们都是无,在这种情况下将引发一个ValueError。
  • ​axis​​:{0,1,…},默认为0。沿着连接的轴。
  • ​join​​:{‘inner’,‘outer’},默认为“outer”。如何处理其他轴上的索引。outer为联合和inner为交集。
  • ​ignore_index​​:boolean,default False。如果为True,请不要使用并置轴上的索引值。结果轴将被标记为0,…,n-1。如果要连接其中并置轴没有有意义的索引信息的对象,这将非常有用。
  • ​join_axes​​​:Index对象列表。用于其他n-1轴的特定索引,而不是执行内部/外部设置逻辑。
    keys:序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。
  • ​levels​​:序列列表,默认值无。用于构建MultiIndex的特定级别(唯一值)。否则,它们将从键推断。
  • ​names​​:list,default无。结果层次索引中的级别的名称。
  • ​verify_integrity​​:boolean,default False。检查新连接的轴是否包含重复项。这相对于实际的数据串联可能是非常昂贵的。
  • ​copy​​:boolean,default True。如果为False,请勿不必要地复制数据。

二、举例

# -*- coding: utf-8 -*-
"""
Created on Tue Sep 28 10:14:46 2021

@author: 86493
"""
import pandas as pd
s1 = pd.Series(['andy', 'guo'])
s2 = pd.Series(['li', 'fei'])
# 将两个series拼接在一起
pd.concat([s1, s2])
"""
0 andy
1 guo
0 li
1 fei
dtype: object
"""
pd.concat([s1, s2], ignore_index = True)
# 清除之前存在的index,改为从0按顺序开始
"""
0 andy
1 guo
2 li
3 fei
dtype: object
"""
# 给原来基础上给每个series添加对应的key值
end1 = pd.concat([s1, s2], keys = ['s1', 's2'])
"""
s1 0 andy
1 guo
s2 0 li
1 fei
dtype: object
"""
print(end1['s1'])
"""
0 andy
1 guo
dtype: object
"""
print('-'*40)

# 给key加label
end2 = pd.concat([s1, s2], keys = ['s1', 's2'],
names = ['Series name', 'Row ID'])
print(end2)
"""
Series name Row ID
s1 0 andy
1 guo
s2 0 li
1 fei
dtype: object
"""
print('-'*40)

df1 = pd.DataFrame([['a', 1], ['b', 2]],
columns = ['letter' , 'number'])
print(df1)
"""
letter number
0 a 1
1 b 2
"""
print('-'*40)


df2 = pd.DataFrame([['c', 3], ['d', 4]],
columns = ['letter' , 'number'])
print(df2)
print('-'*40)

# 将两个dataframe的指定列拼接在一起
end3 = pd.concat([df1, df2])
print(end3)
"""
letter number
0 a 1
1 b 2
0 c 3
1 d 4
"""
print('-'*40)

df3 = pd.DataFrame([['c', '3', 'cat'], ['d', '4', 'dog']],
columns = ['letter', 'number', 'animal'])
print("df3:\n", df3)
print('-'*40)

end4 = pd.concat([df1, df3], sort = False) # false则代表没改变columns顺序
print("end4:\n", end4)
print('-'*40)

# 返回两者重复的列,不相同的列不显示
end5 = pd.concat([df1, df3], join = "inner")
print("end5:\n", end5)
print('-'*40)

df4 = pd.DataFrame([['bird', 'polly'], ['monkey', 'george']],
columns = ['animal', 'name'])
end6 = pd.concat([df1, df4], axis = 1) # 垂直拼接
print("end6:\n", end6)
print('-'*40)

df5 = pd.DataFrame([1], index = ['a'])
print("df5:\n", df5)
print('-'*40)

df6 = pd.DataFrame([2], index = ['a'])
print("df6:\n", df6)
print('-'*40)

pd.concat([df5, df6], verify_integrity = True)

结果为:

0    andy
1 guo
dtype: object
----------------------------------------
Series name Row ID
s1 0 andy
1 guo
s2 0 li
1 fei
dtype: object
----------------------------------------
letter number
0 a 1
1 b 2
----------------------------------------
letter number
0 c 3
1 d 4
----------------------------------------
letter number
0 a 1
1 b 2
0 c 3
1 d 4
----------------------------------------
df3:
letter number animal
0 c 3 cat
1 d 4 dog
----------------------------------------
end4:
letter number animal
0 a 1 NaN
1 b 2 NaN
0 c 3 cat
1 d 4 dog
----------------------------------------
end5:
letter number
0 a 1
1 b 2
0 c 3
1 d 4
----------------------------------------
end6:
letter number animal name
0 a 1 bird polly
1 b 2 monkey george
----------------------------------------
df5:
0
a 1
----------------------------------------
df6:
0
a 2
----------------------------------------

Reference

pandas官方文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html?highlight=concat#pandas.concat