如何在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)
输出: