python - Python 与 SQL 外连接给出了不同的结果。为什么?
问题描述
我在理解 Python (Pandas) FULL OUTER JOINS 和 Microsoft SQL Server 之间的区别时遇到了一些麻烦。在不深入数据的情况下,也许有人了解它们如何发挥不同作用的理论。我正在并行运行这两个代码,以确保它在我学习 Python 时工作。
SQL 代码:
SELECT *
FROM
(
SELECT *
FROM df1 a
FULL OUTER JOIN df2 b
on a.id_no=b.idno
) abc
FULL OUTER JOIN df3 c
on abc.id_no=c.idno
蟒蛇代码:
TripleMerge = df1.merge(df2, left_on='id_no', right_on=df2['idno'].astype(np.int64), how='outer').merge(
df3, left_on='id_no', right_on=df3['idno'].astype(np.int64), how='outer')
每个连接的第一部分给了我相同数量的行 (2323) 第二部分结果总共有 4951 行用于 SQL 和 4552 用于 Python。我想不通。
一些线索: Python 不会让我在不转换 int64 的情况下加入“idno”。我以相同的方式对 SQL 和 Python 中的所有 dfs 进行排序以控制排序。
如果您能想到任何可以调查的地方,请告诉我。或者,如果您知道如何更好地编写 Python 代码(或完全不同的方式来测试行输出,请告诉我)。
谢谢!
解决方案
在您的 python 示例中没有与 abc 选择等效的选项。很确定你的语法只是有点偏离那里。
在 SQL Server 中,您说的是进行此连接,然后将其连接到另一个表的值上。
尝试这个:
pd.merge(pd.merge(df1,df2,left_on='id_no', right_on='idno', how='outer'),df3,left_on='id_no', right_on='idno',how='outer' )
推荐阅读
- python - 1 列有一个 int。另一个有一个整数列表。如何将数据帧转换为这些对的 numpy rec 数组?
- sql - AWS Redshift SQL - PIVOT 查询(一行/行多次计数)
- typescript - TSLint object-literal-sort-keys 按字母顺序排序,但错误仍然存在
- python - 从列表和字典中抓取网页
- javascript - 异步函数可以返回 undefined 而不是 Promise
- python - zipfile 压缩所有以“data_”开头的文件夹
- asp.net-core - 如何在 .net 核心中登录 Google 时调用回调?
- makefile - 如何在 Makefile 工作中使用 foreach 和 eval 函数?
- python - Python 如何在 Django 中创建虚拟环境?
- tfs - 是否可以跨 TFS 2018.3 和 Azure DevOps Server 中的多个项目计算用户的工作量