一、函数介绍和参数含义
比赛中经常用到数据处理,当需要对某些表的列数据进行拼接时则会用到concatAPI,关于直观上的图形拼接栗子可以参考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 ----------------------------------------