如何比较Python中两个数据集VS NULL之间的差异

时间:2019-05-15 17:16:16

标签: python

我正在创建一个脚本,该脚本将Excel文件与Snowflake数据库表进行比较。如果各列都相同,则脚本将从Excel导入数据并将其追加或插入到Snowflake表中。我正在使用两个相同的电子表格进行测试以使脚本正常工作-如果我正确理解我的代码,并且如果两个文件之间没有差异,则此脚本应返回“ Sweet”。但是,它返回的是“仅此而已!”这是ELSE stmt。我可能会误解“无”在这里的工作原理,因此对此有任何想法。

我还有一个测试文件,在其中添加了一个垃圾列(“ 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进行了比较。

1 个答案:

答案 0 :(得分:1)

您的问题是您正在使用otherOptions.fields运算符来检查对象是否等于None。

Python有不同的方法来检查是否为空,无或为空。

如果对象为空或为 None ,只需将Iterable对象放在==语句中或if构造函数中,就会产生true。 >

bool()

如果比较的变量也为None(假设对象是set对象的纯实例),则与None进行比较只会产生myset = None bool(myset) False myset = set() bool(myset) False myset.add("foo") bool(myset) True

True

查看对象是否为空:

myset = None
myset == None
True

myset == set()
False

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

myset = None
myset is None
True

选择适合您情况的内容,但是myset = set() len(myset) == 0 True myset = None len(myset) # [...] TypeError #[...] 是更安全的IMO。