因爲從你至少稍微熟悉pandas前面的問題,怎麼樣:
import pandas as pd
df1 = pd.read_csv("file1.csv", sep=r"\s+")
df2 = pd.read_csv("file2.csv", sep=r"\s+")
merged = df1.merge(df2.rename_axis({"Mon-id": "NAME"}))
merged.to_csv("merged.csv", index=False)
一些解釋(注意,我已修改file2.csv
,以便th以下是更多共同點)。
首先,讀取數據:
>>> import pandas as pd
>>> df1 = pd.read_csv("file1.csv", sep=r"\s+")
>>> df2 = pd.read_csv("file2.csv", sep=r"\s+")
>>> df1.head()
NAME RA DEC Mean_I1 Mean_I2
0 Mon-000101 100.27242 9.608597 11.082 10.034
1 Mon-000102 100.18012 9.520860 12.296 12.223
2 Mon-000103 100.24811 9.586362 9.429 9.010
3 Mon-000104 100.26741 9.867225 11.811 11.797
4 Mon-000105 100.21005 9.814060 12.087 12.090
>>> df2.head()
Mon-id
0 Mon-000101
1 Mon-000121
2 Mon-000131
3 Mon-000141
4 Mon-000151
然後,我們可以在DF2重命名軸:
>>> df2.rename_axis({"Mon-id": "NAME"}).head()
NAME
0 Mon-000101
1 Mon-000121
2 Mon-000131
3 Mon-000141
4 Mon-000151
,並在此之後,merge
只會做正確的事:
>>> merged = df1.merge(df2.rename_axis({"Mon-id": "NAME"}))
>>> merged
NAME RA DEC Mean_I1 Mean_I2
0 Mon-000101 100.27242 9.608597 11.082 10.034
1 Mon-000121 100.45421 9.685027 11.805 11.777
2 Mon-000131 100.20533 9.397307 -100.000 11.764
3 Mon-000141 100.26134 9.388555 -100.000 12.571
最後,我們可以寫出來,告訴它不要添加索引列:
>>> merged.to_csv("output.csv", index=False)
生產文件看起來解決這個像
NAME,RA,DEC,Mean_I1,Mean_I2
Mon-000101,100.27242,9.608597,11.082,10.034
Mon-000121,100.45421,9.685027,11.805,11.777
Mon-000131,100.20533,9.397307,-100.0,11.764
Mon-000141,100.26134,9.388555,-100.0,12.571
您是否嘗試過使用python?閱讀第二個文件以創建出現的Mon-xxxx列表,然後讀取第一個文件,分割每一行並檢查第一個字段是否出現在該列表中 – xuanji
請編輯該問題以澄清:您的意思是*相同*行(在這種情況下'comm'或'diff'應該工作)還是真的只是「相似」?如果是後者,請詳細說明你的相似概念(編輯距離,相同的字母,相同的語義,什麼?) – tripleee