python - 如何在python中比较两个DataFrame(StructType)
问题描述
本质上这是比较两个数据框,我可以将它们的名称与以下内容进行比较:
def diff(first, second):
second = set(second)
return [item for item in first if item not in second]
但我还想不仅在名称上进行比较,还想在数据类型上进行比较
示例数据框如下:
>>> pDF1.schema
StructType(
List(
StructField(Scen_Id,IntegerType,true),
StructField(Flow_Direction,StringType,true),
StructField(Dataset_Type,StringType,true),
StructField(Flag_Extrapolation_Percent_Change_Stay,IntegerType,true)
)
)
>>> pDF2.schema
StructType(
List(
StructField(Scen_Id,StringType,true),
StructField(Flow_Direction,StringType,true),
StructField(Dataset_Type,StringType,true),
StructField(Flag_Extrapolation_Percent_Change_Stay,IntegerType,true)
)
)
从这个特殊的简化示例中可以看出(通常我们的数据帧包含超过 100 个字段),pDF2 具有与 pDF1 相同的名称/数据类型,除了第一个字段具有不同的数据类型。
非常感谢。
解决方案
好的,所以答案确实非常简单,如下所示,供未来读者参考:
def diff(first, second):
second = set(second)
return [item for item in first if item not in second]
dl1_fields = list(pDF1.schema.fields)
dl2_fields = list(pDF2.schema.fields)
print("=========================================================")
print("schema comparison result:")
print("=========================================================")
dl1Notdl2 = diff(dl1_fields, dl2_fields)
print(str(len(dl1Notdl2)) + " columns in first df but not in second")
pprint.pprint(dl1Notdl2)
print("=========================================================")
dl2Notdl1 = diff(dl2_fields, dl1_fields)
print(str(len(dl2Notdl1)) + " columns in second df but not in first")
pprint.pprint(dl2Notdl1)
推荐阅读
- python - 在计算大于和小于列表中某些值的值的数量时会跳过一些数字
- validation - Google Sheets GAS:将公式设置为具有日期标准数据验证的单元格
- r-corrplot - 如何使用 corrplot 获取 mxn 矩阵而不是 mxm(两组不同的变量)
- amazon-web-services - 我是否需要 AWS 软件开发工具包 (SDK) 才能通过 MTurk 运行我的 qualtrics 调查?
- string - 在 PL/SQL 中赋予 String 功能
- r - 与标记效果图相关的事件概率?
- excel - “找不到文件”Excel VBA
- android - Google MLkit 和其他库中对象/面部标注的准确性低
- c++ - 如何在 C++ 中检索矩阵的每个向量的第一个元素?
- spring - 在这个 Pom.xml 中找不到错误