2013-11-02 32 views
4

我有兩個excel文件。兩個文件也有大約20萬行。 (I給出在實施例只是六行。)Python中的匹配

file1.xlsx

M1   M2   M3  M4 
97.1859 -59.1873  0.000912 4.55 
63.116 -75.958  0.003797 20.85 
112.09 -22.9276  0.005008 2.26 
320.7931 -63.4153  0.008382 7.45 
337.8978 -72.8617  0.009965 3.88 
99.2183 -56.5418  0.018141 18.17 

file2.xlsx

N1  N2  N3  N4  N5   N6 
0.057  4  Im 6.61 0.005008 38.85929 
0.065  36  Im 9.27 0.003797 -19.4988 
0.062  68  Im 8.06 0.008382 -51.8935 
0.066  46  Im 8.55 0.009965 -40.5912 
        Im 9.1  0.000912  1.089013 
0.075  32  Im 12.31 0.018141  3.946489 

M3(file1中)和N5(file2中)列是相同的。

根據M3-N5列,我想匹配這兩個文件並在Python中創建第三個文件(輸出文件)。

output.xlsx

M1  M2   M3-N5  M4 N1  N2 N3 N4   N5 
97.1859 -59.1873  0.000912 4.55    Im 9.1  1.089013 
63.116 -75.958  0.003797 20.85 0.065 36 Im 9.27 -19.4988 
112.09 -22.9276  0.005008 2.26 0.057 4 Im 6.61  38.85929 
320.7931 -63.4153  0.008382 7.45 0.062 68 Im 8.06 -51.8935 
337.8978 -72.8617  0.009965 3.88 0.066 46 Im 8.55 -40.5912 
99.2183 -56.5418  0.018141 18.17 0.075 32 Im 12.31  3.946489 

我做了一個程序叫TOPCAT但我想的Python爲做對比。不過,我已經開始使用新的Python,所以我不能寫出詳細的代碼。

我該怎麼做?我可以通過哪些代碼?

任何幫助或建議將不勝感激。

謝謝。

+1

感謝提供輸入並輸出數據。它使你的問題非常清楚。爲了幫助你,我們也理想的需要看到你已經嘗試了什麼,以及你在哪裏被困住。不過,我的建議是不要使用Python,而只是將其導入數據庫(例如,sqlite,mysql,postgresql),並通過查詢連接兩個表來獲得輸出結果。我不知道如果你嘗試加入花車會發生什麼 - 如果你看,可能會有一個簡單的方法。 – YXD

+1

如果你必須在Python中做到這一點,你應該看看[pandas](http://pandas.pydata.org/)庫。 – YXD

回答

0

與蟒蛇Excel文件打交道,你一般有兩種方法:

  • 使用win32com。這是控制小程序,如Excel,Word中時,Outlook等

的基本過程是簡單易懂的,看起來像這樣的API:

import win32com.client 
excel = win32com.client.Dispatch('Excel.Application') 

從那裏,你可以使用Excel原生如命令:

excel.Visible = True #show the excel 
excel.Workbooks.Add() #open a workbook 
print excel.Cells(1, 1).Value #print the value of a cell at position 1, 1 

這是特別好,當你需要使用一些Excel的相關功能(因爲它只是一個用於控制通過蟒蛇擅長系統)。然而,你可能會更喜歡...

  • 使用xlrd和xlwt(相應地,它表示excel-read和excel-write)。使用這些庫可以讀取和寫入更加容易的pythonic風格的語言,並且您還可以訪問任何excel類型的文件(包括OpenOffice'excel'工作表等)。

你應該definitly檢查出documentation for both libraries,但這裏有一個簡單的例子:

import xlrd 
workbook = xlrd.open_workbook('my_workbook.xls') 
worksheet = workbook.sheet_by_name('Sheet1') 

此外,檢查出的examples here,和周圍有點谷歌來學習如何使用它們。

-

當你要採取的方法最終決定,盡最大努力解決它,如果你有麻煩的代碼或它不工作像你例外,回來這裏爲了讓我們看看你的代碼,有人會明確幫助你。祝你好運!

3

使用熊貓。

讀德文件:

dfi = pandas.read_excel('myexcel_i') 

使公共列(用作連接參考的那一個)的數據幀索引:

dfi = dfi.set_index(my_column) 

連接兩個擅長

df = pandas.concat([df1, df2], axis=1) 

保存爲新文件:

df.to_excel('myfile.xlsx') 
+0

@SaulloCastro它們按索引合併。你不需要對它們進行設置。 – joaquin

+1

謝謝!很高興知道! –

+1

@SaulloCastro有點我們的答案正在趨同;-) – joaquin

1

使用Pandas你可以做這個任務,如:

import pandas as pd 
df1 = pd.read_excel('file1.xlsx', 'Sheet1') 
df1.sort(columns='M3') 

df2 = pd.read_excel('file2.xlsx', 'Sheet1') 
df2.sort(columns='N5') 

df3 = pd.concat((df1, df2), axis=1) 

df3 = df3.sort(axis=1) 

df3.to_excel('output.xlsx') 

注:排序操作,如果您使用​​在@華的回答爲如上所述不需要......

+1

ExcelFile +解析已被棄用在熊貓。使用read_excel – joaquin

+0

謝謝!我將更新答案...... –

+0

另外,您必須將數據幀索引分別設置爲列M3和N5,否則它將無法工作。看到我的答案。 – joaquin