首页 > 解决方案 > 如何在 Python 中比较两个数据集 VS NULL 之间的差异

问题描述

我正在创建一个脚本,将 Excel 文件与雪花数据库表进行比较。如果列都相同,则脚本将从 Excel 导入数据并附加或插入到雪花表中。我正在使用两个相同的电子表格进行测试以使脚本正常运行 - 如果我正确理解我的代码,如果两个文件没有区别,这个脚本应该返回“Sweet”。但是,它正在返回“这就是所有人!” 这是ELSE stmt。我可能会误解 NONE 在这里的工作原理,因此对此的任何想法都会有所帮助。

我还有一个测试文件,我在其中添加了一个垃圾列(“blah”)——以确保脚本正常运行。无论我与相同的文件还是 blah 文件进行比较,我都会得到相同的结果。我还在 IF stmt 中尝试了 == 而不是 IS,我尝试将 set1 和 set2 变量传递给 main() 函数,但这些都不起作用。

import pandas as pd

file1 = pd.read_excel('./excel/file1.xlsx', sheet_name = 'export',index_col = 0)
file2 = pd.read_excel('./excel/file2.xlsx', sheet_name = 'export',index_col = 0)

set1 = set(file1.columns)
set2 = set(file2.columns)

def main():
    if set1.difference(set2) == None:
        print("Sweet")
    else: 
        print("that's all folks!")
main()

我想要实现的是,如果文件在列中有任何差异,它应该注册到函数中,这样我就可以让它抛出错误。如果列匹配,则通过函数并最终写入 Snowflake 是安全的。

更新:比较set1.difference(set2)set()不是None成功。

标签: python

解决方案


您的问题是您正在使用==运算符来检查对象是否等于无。

Python 有不同的方法来检查空虚、虚无或两者兼而有之。

如果对象为空或为None ,只需将 Iterable 对象放入if语句或构造函数中,就会产生 true :bool()

myset = None
bool(myset)
False

myset = set()
bool(myset)
False

myset.add("foo")
bool(myset)
True

仅当比较的变量也为 None 时,与 None 比较才会产生True(假设对象是 set 对象的纯实例):

myset = None
myset == None
True

myset == set()
False

查看对象是否为无:

myset = None
myset is None
True

要查看对象是否为空(但请注意,如果对象为 None,这将引发异常):

myset = set()
len(myset) == 0
True

myset = None
len(myset)
# [...]
TypeError #[...]

选择适合您的情况,但if object更安全的 IMO。


推荐阅读