【问题标题】:Python : How to compare two csv files and print out the matching strings in a new filePython:如何比较两个 csv 文件并在新文件中打印出匹配的字符串
【发布时间】:2019-09-25 12:47:04
【问题描述】:

我正在尝试比较两个 csv 文件,并将匹配的字符串打印到第三个文件中。在我的情况下,我有一个名为 raw_data.csv 的文件 1,其中包含 3 列作为 name_id、reference_id 和 Compound_name。命名 new_data.csv 的文件 2 只有一列作为复合名称。我想匹配两个文件中的compound_name 列中的数据,并将相似compound_name 的name_id 和reference_id 打印到新文件final.csv。

文件 1 - raw_data.csv

name_id         reference_id     compound_name
IVRD345         456TTRY          Citrulline_malate
IVRD456         657TRDF          Succinic_acid
IVRD624         473YRHW          Glutamic_acid

文件 2 - new_data.csv

compound_name
calcium
glutamic_acid
citric_acid

谢谢

【问题讨论】:

  • pandas merge 在这里会有所帮助
  • 到目前为止你尝试了什么?
  • 我尝试编辑我在 github 上找到的代码 - 但我对 python 很陌生,所以我严重失败了 import csv file_list = ['file1.csv', 'file2.csv'] f1 = open (file_list[0], 'r').readlines() f2 = open(file_list[1], 'r').readlines() fName = open('final.csv', 'a') for _ in range( 2):对于 f1 中的行:如果 f2 中的行:fName.write(row) f1, f2 = f2, f1
  • 如果你使用的 shell 可以使用 grep,grep -Ff new_data.csv raw_data.csv 可能会得到你需要的东西。
  • 我试过了,但我丢失了一些数据。所以想在python中尝试

标签: python csv


【解决方案1】:

我会将两者都加载到 pandas 中,然后像这样比较它们的重复位置:

import pandas as pd
df1 = pd.read_csv('raw_data.csv')
df2 = pd.read_csv('new_data.csv')
df_all = pd.concat([df1,df2])
df_all["duplicate"] = df_all.duplicated(keep='first',subset=['compound_name'])

然后你可以:

for index, row in df_all.iterrows():
   if row['duplicate']:
      print("Name ID: {} and Reference ID: {}".format(row['name_id'],row['reference_id']))

【讨论】:

  • 不客气。请单击复选标记将其选为答案。由于我也是论坛的新手,因此它可以帮助我在 stackoverflow 上做更多的事情。
【解决方案2】:

试试下面的代码:

import pandas as pd
df1=pd.read_csv('raw_data.csv')
df2=pd.read_csv('new_data.csv')
df_final=pd.merge(df1,df2,on=['compound_name'])
df_final.to_csv('final.csv',columns=['name_id','reference_id'])

希望这会有所帮助!

【讨论】:

  • .. 感谢您的帮助,非常感谢
  • 如果此解决方案对您的情况有所帮助,请点赞,以便其他人受益。
猜你喜欢
  • 2016-12-24
  • 2014-01-08
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多