检查2个CSV中的相同ID是否有不同的名称

2024-09-21 20:15:59 发布

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

我正在尝试编写一个程序,它用python执行以下操作

  1. 读取两个CSV文件
  2. 检查CSV中匹配的ID是否具有不同的名称
  3. 输出到另一个CSV ID、不匹配的名称和位置

第一个CSV文件是Mater CSV文件,其中包含所有正确的信息。它看起来如下所示

^{tb1}$

第二个CSV希望与主服务器通信,如下所示

^{tb2}$

我希望能够检查第二个CSV中具有相应名称的ID是否与主CSV中的匹配ID匹配

如果没有,则将ID、存在差异的名称和位置输出到新的CSV

这就是我尝试过的

with open(file1) as fp1:
    root = csv.reader(fp1)
    rows1 = {}
    for i in root:
        rows1[i[0]]=i
    if "id" in rows1:
        del rows1["id"]

with open(file2) as fp1:
    root = csv.reader(fp1)
    rows2 = {}
    for i in root:
        rows2[i[0]]=i
    if "id" in rows2:
        del rows2["id"]

   result = set(rows1.keys()).intersection(set(rows2.keys()))

此解决方案的问题在于,它只是比较ID而不是名称数据,与主数据相比,名称数据位于不同的列中

我不知道如何读取和比较列并将数据输出到新的CSV


Tags: 文件csv数据in名称idaswith
1条回答
网友
1楼 · 发布于 2024-09-21 20:15:59

也许我会使用数据帧连接来获得所需的结果,而不是使用这种方法

df3 = pd.merge(df2, df1, left_on=["ID", "Name2"], right_on=["ID", "Name"] ,how="left")

其中,Name2中是复制的名称列

ID  Unnamed: 1  Name2   Marital Status  Name    Location
123 """ """     John    Single          John    London
345 """ """     Paul    Married     

现在,我可以用值过滤掉名称列,从而得到所需的结果,获得所需的列并将其写入csv

df4 = df3[df3["Name"].isna() == True].filter(["ID", "Name2"])
df4.to_csv("results.csv")

相关问题 更多 >