Pandas 连接方式对笛卡尔积的影响:内连接、外连接、左连接和右连接
Pandas 连接方式对笛卡尔积的影响:内连接、外连接、左连接和右连接
在 Pandas 中,merge() 函数用于连接两个 DataFrame。默认情况下,merge() 函数执行的是内连接,即只返回两个表中共有的行。但是,how 参数可以指定不同的连接方式,从而影响连接结果中的行数和列数,进而改变笛卡尔积规则。
不同连接方式对笛卡尔积的影响
以下是一些示例来说明不同连接方式对笛卡尔积的影响:
- 内连接(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' 是两个表中共有的,因此只有这一行被返回。
- 外连接(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 填充。
- 左连接(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 填充。
- 右连接(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 填充。
总结
通过这些例子可以看出,连接方式的变化会影响连接结果中的行数和列数,从而改变笛卡尔积规则。选择合适的连接方式可以帮助我们根据需求获取所需的数据。
原文地址: https://www.cveoy.top/t/topic/t 著作权归作者所有。请勿转载和采集!