用Python匹配两个excel表格中相同的列,然后将其中一个表格某一列数据赋值到另外一个表格中指定位置

有两个excel表格1和2,如果表格1中A列与表格2中B列数据相同,表格1中C列与表格2中D列相同,那么就将表格2中H列数据赋值给表格1中F列 ,用Python如何实现这个要求?

可以使用 Python 中的第三方库 Pandas 来实现这个要求。下面是一个实现的例子:

import pandas as pd

# 读取两个 Excel 文档
df1 = pd.read_excel('excel1.xlsx')
df2 = pd.read_excel('excel2.xlsx')

# 使用 merge 方法将两个表格合并,根据 A 和 B 列和 C 和 D 列进行匹配

```python
matched_data = pd.merge(df1, df2, how='inner', left_on=['A', 'B'], right_on=['C', 'D'])


# 将匹配后的 H 列数据赋值给 F 列

```python
df1.loc[matched_data.index, 'F'] = matched_data['H']

将修改后的 Excel 保存到文件中

df1.to_excel('result.xlsx', index=False)

在这个例子中,使用 Pandas 的 read_excel() 方法读取两个 Excel 文档,并使用 merge() 方法将两个文档合并,根据 A 和 B 列和 C 和 D 列进行匹配。然后使用 loc[] 方法将匹配的 H 列数据赋值给 F 列。最后使用 Pandas 的 to_excel() 方法将修改后的 Excel 保存到文件中。

需要注意的是,上述例子中的 excel1.xlsx 和 excel2.xlsx 需要替换为相应的文件名,同时需要根据实际情况修改要匹配的列和要赋值的列的名称。

可以使用 Python 中的 openpyxl 库来实现,代码如下:

from openpyxl import load_workbook

# 读取表格 1 和表格 2
wb1 = load_workbook('table1.xlsx')
ws1 = wb1.active

wb2 = load_workbook('table2.xlsx')
ws2 = wb2.active

for row1 in ws1.iter_rows(min_row=2, values_only=True):
    for row2 in ws2.iter_rows(min_row=2, values_only=True):
        if row1[0] == row2[1] and row1[2] == row2[3]:
            row1[5] = row2[7]
            break

# 将结果保存到新的 Excel 文件中
wb1.save('result.xlsx')

在运行脚本之前,需要将表格 1 和表格 2 存储为 Excel 文件(后缀名为 .xlsx),并与 Python 脚本存储在同一目录下。同时也需要根据实际情况修改代码中的文件名、列名等参数。
试一下是否OK,有需要可以随时沟通,我帮你调整代码

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7580757
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Python查询:查找一个excel文件中的某列是否包含另外一个excel中的某列的数据,并将包含该列中任一数据所在的行进行输出
  • 除此之外, 这篇博客: Python读取excel文件中的数据,绘制折线图、散点图中的 绘制简单折线 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    •  pandas操作Excel表单

      数据准备,有一个Excel文件:lemon.xlsx有两个表单,表单名分别为:Python 以及student,

    Python的表单数据如下所示:

     

    student的表单数据如下所示:

     1:在利用pandas模块进行操作前,可以先引入这个模块,如下:

    import pandas as pd

     2:读取Excel文件的两种方式:

    #方法一:默认读取第一个表单
    df=pd.read_excel('lemon.xlsx')#这个会直接默认读取到这个Excel的第一个表单
    data=df.head()#默认读取前5行的数据
    print("获取到所有的值:\n{0}".format(data))#格式化输出

    得到的结果是一个二维矩阵,如下所示:

    #方法二:通过指定表单名的方式来读取
    df=pd.read_excel('lemon.xlsx',sheet_name='student')#可以通过sheet_name来指定读取的表单
    data=df.head()#默认读取前5行的数据
    print("获取到所有的值:\n{0}".format(data))#格式化输出

    得到的结果如下所示,也是一个二维矩阵:

    #方法三:通过表单索引来指定要访问的表单,0表示第一个表单
    #也可以采用表单名和索引的双重方式来定位表单
    #也可以同时定位多个表单,方式都罗列如下所示
    df=pd.read_excel('lemon.xlsx',sheet_name=['python','student'])#可以通过表单名同时指定多个
    # df=pd.read_excel('lemon.xlsx',sheet_name=0)#可以通过表单索引来指定读取的表单
    # df=pd.read_excel('lemon.xlsx',sheet_name=['python',1])#可以混合的方式来指定
    # df=pd.read_excel('lemon.xlsx',sheet_name=[1,2])#可以通过索引 同时指定多个
    data=df.values#获取所有的数据,注意这里不能用head()方法哦~
    print("获取到所有的值:\n{0}".format(data))#格式化输出
  • 您还可以看一下 曾贤志老师的【曾贤志】用Python处理Excel数据 - 第1季 基础篇课程中的 1.3 手把手教你安装Python程序小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我可以解决该问题。

    解决方案如下:

    1. 首先需要用Python读取excel表格中的数据,这可以使用pandas库来实现。使用pandas.read_excel()方法来读取excel表格,如下:
    import pandas as pd
    excel1 = pd.read_excel('path/to/excel1.xlsx')
    excel2 = pd.read_excel('path/to/excel2.xlsx')
    
    1. 接下来,需要筛选出表格1中与表格2中匹配的行和列,使用pandas库的merge()方法来实现,代码如下:
    merged = pd.merge(excel1, excel2, left_on=['A', 'C'], right_on=['B', 'D'])
    

    其中,left_on和right_on参数指定了合并时使用的列,即在哪些列上进行合并。例如,上面的代码中,我们将表格1的A列和表格1的C列与表格2的B列和表格2的D列匹配。

    1. 最后,需要将表格2中的H列数据赋值到表格1中的F列。这可以使用pandas库的loc()方法来实现,具体代码如下:
    merged.loc[:, 'F'] = merged['H']
    

    其中,loc()方法用于定位符合条件的行和列,这里我们将所有行的F列赋值为H列的值。

    1. 最后,保存修改后的表格1即可,代码如下:
    merged.to_excel('path/to/modified_excel1.xlsx')
    

    完整代码如下:

    import pandas as pd
    
    # 读取两个excel表格
    excel1 = pd.read_excel('path/to/excel1.xlsx')
    excel2 = pd.read_excel('path/to/excel2.xlsx')
    
    # 合并表格
    merged = pd.merge(excel1, excel2, left_on=['A', 'C'], right_on=['B', 'D'])
    
    # 赋值
    merged.loc[:, 'F'] = merged['H']
    
    # 保存表格1
    merged.to_excel('path/to/modified_excel1.xlsx')
    

    需要注意的是,上述代码中需要根据实际表格的列名和路径进行相应的修改。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^