如何获取和比较pyspark中两个数据框中相似列的所有值的数据类型

Posted

技术标签:

【中文标题】如何获取和比较pyspark中两个数据框中相似列的所有值的数据类型【英文标题】:How to get and compare data type for all the values for similar columns in two dataframes in pyspark 【发布时间】:2020-08-19 14:26:51 【问题描述】:

我有两个具有相同列名的文件。我通过阅读这些CSV 文件创建了两个数据框。考虑一个名为Units Sold 的列。默认情况下,当我检查架构时,它的数据类型是string。现在,我想在两个数据框中遍历该列的每一行数据,并检查数据类型是否正确。

如果一个文件中的一列是numeric,那么如果一个文件的值是345,另一个文件的值是345.00,那么第二个文件的列应该是相同的,然后突出显示,因为这里的数据类型不同.我尝试了下面的东西,但这非常通用:

types1=[df1.dtypes]
#print(types1)
types2 =[df2.dtypes]
#print(types2)

if(types1==types2):
    print("Data types is equal for both the files..")
else:
    print("Data types is NOT equal for both the files..")  

以下是列和示例数据:

Units Sold
8446
3018
1517
3322
9845
9528

我没有找到任何与我的问题相关的帖子。任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,不得不遍历列。我遇到的问题是,由于 NA 值指示符,某些数字列有时会被读取为字符串。

这是我检查类型的代码块(我假设 2 个数据帧具有相同的列,名称完全相同)我还对其进行了调整以具有与您相同的输出:

df1_types = pd.DataFrame(df1.dtypes,columns=["colname", "type"])
df2_types = pd.DataFrame(df2.dtypes,columns=["colname", "type"])
flag = True
for index, row in df1_types.iterrows():
    if row['type'] != df2_types[df2_types['colname'] == row['colname']]['type'].values[0]:
        # Add numeric check here if needed
        flag = False
        break
if flag:
    print("Data types is equal for both the files..")
else:
    print("Data types is NOT equal for both the files..") 

您必须在注释区域中为数字列添加一些自定义检查。

【讨论】:

嘿!谢谢回复。运行您的代码时出现此错误'builtin_function_or_method' object has no attribute 'values' 你的 dtypes 对象的类型是什么? (您可以将其打印到您的问题中吗)我认为我们不使用相同的 pyspark 版本。 我的版本是2.4.4 我刚刚调整了解决方案,dtypes 返回一个元组列表,而不是索引列表。 好的,但是它会检查特定列是否通过了?

以上是关于如何获取和比较pyspark中两个数据框中相似列的所有值的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

pyspark:比较给定列的值时从数据框中获取公共数据

从 pyspark 数据框中获取多个(100+)列的空计数、最小值和最大值的最佳方法

如何在 PySpark 中比较 2 个数据框中的数据类型和列

如何更改pyspark数据框中列的顺序?

如何通过 Pyspark 中同一数据框中另一列的正则表达式值过滤数据框中的一列

pyspark 数据框中所有列的总计数为零