【问题标题】:How to compare all the columns of a dataframe with another dataframe columns and obtain delta如何将数据框的所有列与另一个数据框列进行比较并获得增量
【发布时间】:2019-12-16 03:42:20
【问题描述】:

我有 2 个文件夹,每个文件夹包含大约 500 个 txt 文件。两个文件夹中的文件名相同。我需要将一个文件夹中每个文件的每一列与另一个文件夹文件进行比较,并找到增量(如果有)。在某些文件中,列数可能超过 100。从所有文件计算增量的最佳方法是什么? 我尝试了各种方法,例如 df1[col].equals(df2[col]) 但是在执行更大的文件时,会出现 dtype 内存预期并且执行会突然停止。

我尝试了以下顺序: 1)循环浏览文件夹中的文件。 2)将文件夹1-filex放入一个数据框(df1),将文件夹2-filex放入另一个数据框(df2)。 3)循环遍历所有列以使用 如果不是 df1[col].equals(df2[col]): compare()#如下所示 4) 将结果附加到新的 Dataframe

def compare():
   df1= pd.read_csv(folder1_xfile.txt,sep='\t')
   df2= pd.read_csv(folder2_xfile.txt,sep='\t')
   ser1= pd.Series(df1[col].to_list())
   ser2= pd.Series(df2[col].to_list())
   d2= ser1.eq(ser2)
   changeRow= d2.index.where(d2==False).fillna(9999999)

''' 从上面我可以得到值发生变化的行索引。 但是对于大数据,这个条件失败,执行停止 突然。 '''

def getComparison(df1,df2,fi):

    changeVla=[]
    dfold= pd.DataFrame()
    df= pd.DataFrame()

    for col in df2.columns:
        if not df1[col].equals(df2[col]):
            ser1= pd.Series(df1[col].to_list())
            ser2= pd.Series(df2[col].to_list())

            d2= ser1.eq(ser2)

            changeVla= d2.index.where(d2==False).fillna(9999999)




Final_dataframe= [file_name   Difference_Column_name  
     folder1_file_column_value   folder2_file_column_value]

实际结果:执行突然失败(主要是由于内存)。

【问题讨论】:

    标签: python pandas python-2.7 dataframe


    【解决方案1】:

    你可以试试这样的:

    compare = pd.concat([df1, df2], sort=False)
    duped = compare[compare.duplicated()]
    

    不确定它在内存方面的效果如何。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-13
      • 2020-03-20
      • 2018-03-14
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      相关资源
      最近更新 更多