如何串联两个或多个Pandas数据帧

  • Post category:Python

串联两个或多个Pandas数据帧,可以使用Pandas提供的函数concat()append()或者merge()。这三个函数都可以完成数据帧的串联功能,但应用场景不同。

下面将分别介绍concat()append()merge()函数的使用方法及实例演示。

一、concat()函数

concat()函数可以将两个或多个数据帧沿着指定的轴进行拼接,并返回拼接后的新数据帧。

具体语法:pd.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)

  • objs:要进行拼接的两个或多个数据帧,可以是列表、元组或字典。
  • axis:指定拼接轴的方向,0表示垂直拼接,1表示水平拼接,默认为0。
  • join:指定连接方式,’outer’表示并集,’inner’表示交集,默认为’outer’。
  • ignore_index:忽略原始数据帧的行索引(如果行索引不为唯一),生成一个新的行索引,默认为False。
  • keys:与拼接对象形状相同的分组键,可以是任意形式的可迭代对象。
  • levels:分层索引中指定级别的名称。
  • names:创建分层索引时所使用的层级名称。
  • verify_integrity:检查拼接后的数据帧是否有重复的行,默认为False。
  • sort:根据拼接键按字典序排序数据帧。
  • copy:如果这个参数是真,那么即使合并之后,源也不会被更改。

下面是一个简单的实例:

import pandas as pd

df1=pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]})
df2=pd.DataFrame({'A':[10,11,12],'B':[13,14,15],'C':[16,17,18]})
df3=pd.DataFrame({'A':[19,20,21],'B':[22,23,24],'C':[25,26,27]})

# 垂直拼接
df_vertical=pd.concat([df1,df2,df3],axis=0,ignore_index=True)
print(df_vertical)

# 水平拼接
df_horizontal=pd.concat([df1,df2,df3],axis=1)
print(df_horizontal)

输出结果为:

     A   B   C
0    1   4   7
1    2   5   8
2    3   6   9
3   10  13  16
4   11  14  17
5   12  15  18
6   19  22  25
7   20  23  26
8   21  24  27

   A  B  C   A   B   C   A   B   C
0  1  4  7  10  13  16  19  22  25
1  2  5  8  11  14  17  20  23  26
2  3  6  9  12  15  18  21  24  27

二、append()函数

append()函数可以在数据帧底部追加新的行数据,但如果需要拼接两个或多个数据帧,应该使用concat()函数。

具体语法:DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=False)

  • other:Series、DataFrame、dict或列表类型的数据,要追加到此数据帧的另一个对象。
  • ignore_index:如果为True,则忽略原始数据帧的索引,不会复制它。否则,原始数据帧的索引会复制到新数据帧中。
  • verify_integrity:如果为True,则检查数据帧是否存在重复的索引。默认为False,即不检查。
  • sort:在执行追加操作之前是否对数据的行排序。默认为False,即不排序。

下面是一个简单的实例:

import pandas as pd

df1=pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]})
df2=pd.DataFrame({'A':[10,11,12],'B':[13,14,15],'C':[16,17,18]})
df3=pd.DataFrame({'A':[19,20,21],'B':[22,23,24],'C':[25,26,27]})

# 追加新的数据帧
df_append=df1.append(df2,ignore_index=True)
df_append=df_append.append(df3,ignore_index=True)
print(df_append)

输出结果为:

     A   B   C
0    1   4   7
1    2   5   8
2    3   6   9
3   10  13  16
4   11  14  17
5   12  15  18
6   19  22  25
7   20  23  26
8   21  24  27

三、merge()函数

merge()函数主要用于根据两个或多个数据帧的某些共同列(或索引)进行合并。在数据库中,这被称为SQL风格的合并。

具体语法:pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, validate=None)

  • left:要合并的第一个数据帧。
  • right:要合并的第二个数据帧。
  • how:连接方式,可以是’inner’、’outer’、’left’或’right’。默认为’inner’。
  • on:用于进行合并操作的列名。必须在两个数据帧中存在,且相同名称的列名。
  • left_on:左侧数据帧中用作键的列。可以是列名或列名的列表。
  • right_on:右侧数据帧中用作键的列。可以是列名或列名的列表。
  • left_index:如果为True,则使用左侧的索引(行标签)作为连接键。默认为False
  • right_index:如果为True,则使用右侧的索引(行标签)作为连接键。默认为False
  • sort:根据拼接键按字典序排序数据帧。
  • suffixes:字符串元组,表示如果列名重复,要在左侧和右侧列名后面添加的后缀。
  • copy:如果这个参数是真,那么即使合并之后,源也不会被更改。
  • validate:如果不是‘None’,则检查合并类型的有效性。只能是“one_to_one”、“one_to_many”、“many_to_one”或“many_to_many”。

下面是一个简单的实例:

import pandas as pd

df1 = pd.DataFrame({"key": ["A", "B", "C", "D"], "value": [1, 2, 3, 4]})
df2 = pd.DataFrame({"key": ["E", "F"], "value": [10, 20]})

# 合并两个数据帧
df_merge=pd.merge(df1,df2,how='outer')
print(df_merge)

输出结果为:

  key  value
0   A      1
1   B      2
2   C      3
3   D      4
4   E     10
5   F     20

在实际应用中,应选择适当的函数和参数来实现所需的合并操作,包括对数据重复值和索引标签的处理、合并键的设置等。