如何在Python Pandas中结合两个数据框架
在许多现实生活中,我们要使用的数据来自于多个文件。我们经常需要把这些文件合并成一个DataFrame来分析数据。Pandas提供了这样的设施,可以轻松地将系列或DataFrame与各种索引的集合逻辑和连接/合并类型的操作中的关系代数功能结合。此外,Pandas还提供了比较两个系列或DataFrame并总结其差异的工具。
连接数据框架
pandas中的concat()函数用于将一个数据框架中的列或行追加到另一个数据框架中。concat()函数完成了沿着一个axis进行连接操作的所有繁重工作,同时对其他axis上的索引(如果有的话)执行可选的集合逻辑(union或intersection)。
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)
输出:
连接数据框架
当我们连接我们的DataFrames时,我们只是把它们加在一起,也就是把它们垂直或并排地堆在一起。另一种结合DataFrames的方法是在每个数据集中使用包含共同值的列(一个共同的唯一ID)。使用一个共同的字段来组合DataFrames被称为 “连接”。包含共同值的列被称为 “连接键”。当一个DataFrame是一个 “查找表”,包含了我们想包含在另一个DataFrame中的额外数据时,以这种方式连接DataFrame通常是有用的。
注意:这种连接表的过程类似于我们在SQL数据库中对表的处理。
当把多个DataFrames粘合在一起时,你可以选择如何处理其他axis(除了被连接的axis以外)。这可以通过以下两种方式进行。
- 取它们的联合,join=’outer’。这是默认选项,因为它导致零信息损失。
- 采取交集的方式,join=’inner’。
示例:
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。
示例:
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()可能采取多个对象进行连接。
示例:
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)
输出: