如何根据两个CSV文件的相似性比较它们的行?

2024-10-06 03:52:59 发布

您现在位置:Python中文网/ 问答频道 /正文

file1.csv看起来像:

enter image description here

file2.csv看起来像:

enter image description here

所需输出为“更新的文件2.csv”:

enter image description here

file1.csv将作为参考,不应更改。 应重新排列file2.csv中的行,以便file1.csv中的每一行都对应于file2.csv中的每一行(基于值的相似性),如共享图像所示。 如果file2.csv中有与file1.csv中的任何行不相似的额外的行,则可以删除这些行(请记住,file1.csv中的行数应等于更新的csv文件)


Tags: 文件csv图像相似性file1file2
2条回答

在这个箱子上使用循环。我只需要比较数据的1列(例如compare min_x columns),因为我看到每列的数据看起来都很相似(我的意思是每列与其他表相比具有相似的差值)。因此,您可以执行如下循环:

import pandas as pd
data1 = pd.read_csv('file1.csv',sep=';') # change the separator to the separator used
data2 = pd.read_csv('file2.csv',sep=';')
df_output = pd.DataFrame()
variable_want_to_compare = 'xmin'
for i in range(len(data1)):
    a = data1[variable_want_to_compare].iloc[i]
    for j in range(len(data2)):
        b = data2[variable_want_to_compare].iloc[j]
        if abs(a-b)<5: # tolerance of value differences
            df_output = df_output.append(data2.iloc[j],ignore_index=True)

我不会比较每一列,因为数据排序会很复杂。如果要对每列进行排序,只需添加更多循环即可。但我认为您不需要它,因为每个列的值的差异看起来相似(根据您的示例)

为了便于编码和计算速度,您可以采取的方法是:首先,将每列中的值转换为列表(您可以使用pandas库)。例如:

import pandas as pd

dataset_1 = pd.read_csv('/PATH/FILE1.csv')
dataset_2 = pd.read_csv('/PATH/FILE2.csv')

x_min_1 = dataset_1['xmin'].values.tolist()
x_min_2 = dataset_2['xmin'].values.tolist()

现在您有了要比较的列,并将其转换为列表。现在,根据您想要执行的操作,有很多方法可以从目标列表中删除重复项,例如列表理解。如果希望x_min_2只包含x_min_1中已有的值,可以执行列表理解:

x_min_2 = [i for i in x_min_2 if i in x_min_1]

很明显,您可以对想要与任何数据集中的任何其他列进行比较的任何列执行此过程。最后,您将使用新的已编辑列表替换目标数据集列:

dataset_2['xmin'] = pd.Series(x_min_2)

相关问题 更多 >