python - 如何在 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 有不同的方法来检查空虚、虚无或两者兼而有之。
如果对象为空或为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。
推荐阅读
- sql - Hive:如何在 SQL 中向后/向前传播列值
- android - Firestore CollectionGroup 查询未显示任何结果
- c - 如何从用户空间获取 FreeBSD 中任何地址的物理地址?
- java - 如何包含询问用户是否想再次玩的问题?
- javascript - ReactJS在函数参数列表中绑定无效的左侧
- google-sheets - 谷歌表格(h)查找特定列中的最后一个非空值
- javascript - 从数据库(PHP MySQL)中搜索和显示结果不适合 html 中的表格
- angular - Angular 构建错误“在“@angular/core”中找不到导出“ɵɵcomponentHostSyntheticListener”(导入为“i0”)
- angular - 如何更改星云微调器 (NbSpinner) 背景颜色
- javascript - JQuery 不更新背景图像元素?