很多语言中都提供了Concat函数用于字符串拼接,比如C语言,乃至数据库结构化查询语言SQL中也是如此。而在Pandas库中,则不是这个用处,反倒是用于多个DataFrame(数据框架)的连接,就类似数据库中表连接的作用。
Pandas库中的Concat函数到底怎么用,一起来研究。
concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
上面concat函数列出了多个参数,都是什么用处呢?我们准备了2个DataFrame(如下图所示df1和df2)用于试验,接下来我们逐个参数来分析。
objs:指定需要连接的DataFrame,列表、元组或字典的形式均可。
# 以列表形式连接df1和df2
print(pd.concat([df1,df2]))
axis:连接轴的方向。0按行(纵向)连接; 1按列(横向)连接。默认值0。
# axis=0为默认值,按行连接,结果参见图例1
# axis=1 表示按列连接,结果参见图例2
print(pd.concat([df1,df2],axis=1))
join:连接方式。outer取并集,inner取交集。默认值'outer'
# join='outer',表示取并集。axis参数变化时,结果参见图例1和图例2
# join='inner',表示取交集。axis参数变化时,结果参见图例3和图例4
print(pd.concat([df1,df2],axis=0,join='inner'))
print(pd.concat([df1,df2],axis=1,join='inner'))
ignore_index:是否忽略原始索引,生成新的索引。
默认值为 False,如果设为True,则在连接轴上索引将被标记为0,1,……n-1。但其他轴上的索引值仍然被保留。
#比较不同参数值的运行结果
pd.concat([df1,df2],ignore_index=False)
pd.concat([df1,df2],ignore_index=True)
keys:用于创建层次化索引的索引值序列,默认为 None。
看下面代码运行结果,建了2层索引,并可以通过key来定位数据块
df=pd.concat([df1,df2],keys=['X','Y'])
print(df)
#可以通过上面定义的Key来定位数据块
print(df.loc['Y'])
其他参数:
levels:指定层次化索引的级别。
names:指定层次化索引级别的名称。
verify_integrity:是否检查结果 DataFrame 的新轴是否重复。默认为 False。
sort:是否按字典顺序对结果进行排序。默认为 False。
copy:是否复制连接的对象。默认为 True。