Pandas 连接方式对笛卡尔积的影响:内连接、外连接、左连接和右连接

在 Pandas 中,merge() 函数用于连接两个 DataFrame。默认情况下,merge() 函数执行的是内连接,即只返回两个表中共有的行。但是,how 参数可以指定不同的连接方式,从而影响连接结果中的行数和列数,进而改变笛卡尔积规则。

不同连接方式对笛卡尔积的影响

以下是一些示例来说明不同连接方式对笛卡尔积的影响:

  1. 内连接(Inner Join)

内连接返回两个表中共有的行,连接键必须在两个表中都存在。

import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2'], 'B': ['B1', 'B2']})
df2 = pd.DataFrame({'A': ['A1', 'A3'], 'C': ['C1', 'C3']})

inner_join = pd.merge(df1, df2, on='A', how='inner')
print(inner_join)

输出结果:

    A   B   C
0  A1  B1  C1

在内连接中,只有 'A1' 是两个表中共有的,因此只有这一行被返回。

  1. 外连接(Outer Join)

外连接返回两个表中所有的行,如果某个表中的行在另一个表中找不到匹配的行,则用 NaN 填充。

import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2'], 'B': ['B1', 'B2']})
df2 = pd.DataFrame({'A': ['A1', 'A3'], 'C': ['C1', 'C3']})

outer_join = pd.merge(df1, df2, on='A', how='outer')
print(outer_join)

输出结果:

    A    B    C
0  A1   B1   C1
1  A2   B2  NaN
2  A3  NaN   C3

在外连接中,所有的行都被返回,如果某个表中的行在另一个表中找不到匹配的行,则用 NaN 填充。

  1. 左连接(Left Join)

左连接返回左表中的所有行,以及右表中与左表匹配的行,如果右表中的行在左表中找不到匹配的行,则用 NaN 填充。

import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2'], 'B': ['B1', 'B2']})
df2 = pd.DataFrame({'A': ['A1', 'A3'], 'C': ['C1', 'C3']})

left_join = pd.merge(df1, df2, on='A', how='left')
print(left_join)

输出结果:

    A   B    C
0  A1  B1   C1
1  A2  B2  NaN

在左连接中,左表中的所有行都被返回,如果右表中的行在左表中找不到匹配的行,则用 NaN 填充。

  1. 右连接(Right Join)

右连接返回右表中的所有行,以及左表中与右表匹配的行,如果左表中的行在右表中找不到匹配的行,则用 NaN 填充。

import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2'], 'B': ['B1', 'B2']})
df2 = pd.DataFrame({'A': ['A1', 'A3'], 'C': ['C1', 'C3']})

right_join = pd.merge(df1, df2, on='A', how='right')
print(right_join)

输出结果:

    A    B   C
0  A1   B1  C1
1  A3  NaN  C3

在右连接中,右表中的所有行都被返回,如果左表中的行在右表中找不到匹配的行,则用 NaN 填充。

总结

通过这些例子可以看出,连接方式的变化会影响连接结果中的行数和列数,从而改变笛卡尔积规则。选择合适的连接方式可以帮助我们根据需求获取所需的数据。

Pandas 连接方式对笛卡尔积的影响:内连接、外连接、左连接和右连接

原文地址: https://www.cveoy.top/t/topic/t 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录