【问题标题】:Match in Python [closed]Python中的匹配[关闭]
【发布时间】:2013-11-13 13:07:01
【问题描述】:

我有两个 Excel 文件。两个文件也有大约 200 000 行。 (我在例子中只给出了六行。)

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(in file1) 和 N5(in file2) 列相同。

根据 M3-N5 列,我想匹配这两个文件并在 Python 中创建第三个文件(输出文件)。

输出.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,所以我无法编写详细的代码。

我该怎么做?我可以通过哪些代码?

任何帮助或建议将不胜感激。

谢谢。

【问题讨论】:

  • 感谢您提供输入和输出数据。它使您的问题非常清楚。为了帮助您,理想情况下,我们还需要查看您尝试过的内容以及您卡在哪里。但是,我的建议是根本不要使用 Python,而只需将其导入数据库(例如 sqlite、mysql、postgresql)并通过连接两个表的查询获取输出。我不知道如果你尝试加入花车会发生什么 - 如果你看,可能有一个简单的方法。
  • 如果您必须在 Python 中执行此操作,您应该查看 pandas 库。

标签: python excel compare match


【解决方案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')

注意:如果您使用@joaquin 的回答中解释的set_index,则不需要上述排序操作...

【讨论】:

  • ExcelFile + parse 在 pandas 中已被弃用。使用 read_excel
  • 谢谢!我会更新答案...
  • 另外,您必须将数据帧索引分别设置为列 M3 和 N5,否则将不起作用。看我的回答。
  • 列名 'M3-N5' 并不意味着一个 substration,只是连字符的名称。您不需要创建此列,因为它将是 excel 文件(索引)中的第一列,也不需要删除“M3”。
  • 你是对的!我已经更新了答案,并添加了它们必须在连接之前进行排序的事实......谢谢!
【解决方案2】:

使用熊猫。

读取de文件:

dfi = pandas.read_excel('myexcel_i')

将公共列(用作连接引用的列)设为数据帧索引:

dfi = dfi.set_index(my_column)

加入两个擅长

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

保存到新文件:

df.to_excel('myfile.xlsx')

【讨论】:

  • @SaulloCastro 它们按索引合并。你不需要对它们进行线条化。
  • 谢谢!很高兴知道!
  • @SaulloCastro 有点我们的答案正在趋同 ;-)
【解决方案3】:

在python中处理excel文件,一般有两种做法:

  • 使用win32com。这是一个用于控制 Excel、Word、Outlook 等 Windows 程序的 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相关功能的时候特别好(因为它只是一个通过python控制excel的系统)。但是,您可能会更喜欢...

  • 使用 xlrd 和 xlwt(分别代表 excel-read 和 excel-write)。使用这些库,您可以使用更简单的 pythonic 风格的语言读取和写入 excel,还可以访问任何 excel 类型的文件(包括 OpenOffice 的“excel”表等)。

您一定要查看documentation for both libraries,但这里有一个简单的例子:

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

另外,请查看examples here,并在 Google 上搜索一下以了解如何使用它们。

--

当您最终决定要采用的方法时,请尽最大努力解决它,如果您的代码有问题或者它不能像您一样正常工作,请回到这里,向我们展示您的代码,肯定有人会帮助你。祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多