如何获取和比较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 数据框中获取多个(100+)列的空计数、最小值和最大值的最佳方法
如何在 PySpark 中比较 2 个数据框中的数据类型和列