📜  如何在Python中组合两个数据框 – Pandas?

📅  最后修改于: 2022-05-13 01:54:28.381000             🧑  作者: Mango

如何在Python中组合两个数据框 – Pandas?

先决条件:熊猫

在许多现实生活中,我们想要使用的数据来自多个文件。我们经常需要将这些文件组合成一个 DataFrame 来分析数据。在连接/合并类型操作的情况下,Pandas 提供了这样的便利,可以轻松地将 Series 或 DataFrame 与索引和关系代数功能的各种集合逻辑相结合。此外,pandas 还提供实用程序来比较两个 Series 或 DataFrame 并总结它们的差异。

连接数据帧

pandas 中的 concat()函数用于将一个 DataFrame 中的列或行附加到另一个 DataFrame 中。 concat()函数完成沿轴执行串联操作的所有繁重工作,同时在其他轴上执行索引(如果有)的可选设置逻辑(并集或交集)。

Python3
import pandas as pd
# First DataFrame
df1 = pd.DataFrame({'id': ['A01', 'A02', 'A03', 'A04'],
                    'Name': ['ABC', 'PQR', 'DEF', 'GHI']})
  
# Second DataFrame
df2 = pd.DataFrame({'id': ['B05', 'B06', 'B07', 'B08'],
                    'Name': ['XYZ', 'TUV', 'MNO', 'JKL']})
  
  
frames = [df1, df2]
  
result = pd.concat(frames)
display(result)


Python3
import pandas as pd
  
df1 = pd.DataFrame({'id': ['A01', 'A02', 'A03', 'A04'],
                    'Name': ['ABC', 'PQR', 'DEF', 'GHI']})
  
df3 = pd.DataFrame({'City': ['MUMBAI', 'PUNE', 'MUMBAI', 'DELHI'],
                    'Age': ['12', '13', '14', '12']})
  
# the default behaviour is join='outer'
# inner join
  
result = pd.concat([df1, df3], axis=1, join='inner')
display(result)


Python3
import pandas as pd
# First DataFrame
df1 = pd.DataFrame({'id': ['A01', 'A02', 'A03', 'A04'],
                    'Name': ['ABC', 'PQR', 'DEF', 'GHI']})
  
# Second DataFrame
df2 = pd.DataFrame({'id': ['B05', 'B06', 'B07', 'B08'],
                    'Name': ['XYZ', 'TUV', 'MNO', 'JKL']})
  
# append method
result = df1.append(df2)
display(result)


Python3
import pandas as pd
# First DataFrame
df1 = pd.DataFrame({'id': ['A01', 'A02', 'A03', 'A04'],
                    'Name': ['ABC', 'PQR', 'DEF', 'GHI']})
  
# Second DataFrame
df2 = pd.DataFrame({'id': ['B05', 'B06', 'B07', 'B08'],
                    'Name': ['XYZ', 'TUV', 'MNO', 'JKL']})
  
df3 = pd.DataFrame({'City': ['MUMBAI', 'PUNE', 'MUMBAI', 'DELHI'],
                    'Age': ['12', '13', '14', '12']})
  
  
# appending multiple DataFrame
result = df1.append([df2, df3])
display(result)


输出:

加入数据帧

当我们连接我们的 DataFrame 时,我们只是将它们相互添加,即垂直或并排堆叠它们。组合 DataFrame 的另一种方法是在每个数据集中使用包含公共值(公共唯一 ID)的列。使用公共字段组合数据帧称为“加入”。包含公共值的列称为“连接键”。当一个 DataFrame 是包含我们希望包含在另一个中的附加数据的“查找表”时,以这种方式连接 DataFrame 通常很有用。

注意:这个连接表的过程类似于我们在 SQL 数据库中处理表的过程。

将多个 DataFrame 粘合在一起时,您可以选择如何处理其他轴(除了被连接的轴)。这可以通过以下两种方式完成:

  • 将它们全部结合起来,join='outer'。这是默认选项,因为它会导致零信息丢失。
  • 取交点,join='inner'。

例子:

蟒蛇3

import pandas as pd
  
df1 = pd.DataFrame({'id': ['A01', 'A02', 'A03', 'A04'],
                    'Name': ['ABC', 'PQR', 'DEF', 'GHI']})
  
df3 = pd.DataFrame({'City': ['MUMBAI', 'PUNE', 'MUMBAI', 'DELHI'],
                    'Age': ['12', '13', '14', '12']})
  
# the default behaviour is join='outer'
# inner join
  
result = pd.concat([df1, df3], axis=1, join='inner')
display(result)

输出:

使用 append 连接

concat() 的一个有用的快捷方式是 Series 和 DataFrame 上的 append() 实例方法。这些方法实际上早于 concat。

例子:

蟒蛇3

import pandas as pd
# First DataFrame
df1 = pd.DataFrame({'id': ['A01', 'A02', 'A03', 'A04'],
                    'Name': ['ABC', 'PQR', 'DEF', 'GHI']})
  
# Second DataFrame
df2 = pd.DataFrame({'id': ['B05', 'B06', 'B07', 'B08'],
                    'Name': ['XYZ', 'TUV', 'MNO', 'JKL']})
  
# append method
result = df1.append(df2)
display(result)

输出:

注意: append() 可能需要多个对象来连接。

例子:

蟒蛇3

import pandas as pd
# First DataFrame
df1 = pd.DataFrame({'id': ['A01', 'A02', 'A03', 'A04'],
                    'Name': ['ABC', 'PQR', 'DEF', 'GHI']})
  
# Second DataFrame
df2 = pd.DataFrame({'id': ['B05', 'B06', 'B07', 'B08'],
                    'Name': ['XYZ', 'TUV', 'MNO', 'JKL']})
  
df3 = pd.DataFrame({'City': ['MUMBAI', 'PUNE', 'MUMBAI', 'DELHI'],
                    'Age': ['12', '13', '14', '12']})
  
  
# appending multiple DataFrame
result = df1.append([df2, df3])
display(result)

输出: