有两个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']
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,有需要可以随时沟通,我帮你调整代码
数据准备,有一个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))#格式化输出
我可以解决该问题。
解决方案如下:
import pandas as pd
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'])
其中,left_on和right_on参数指定了合并时使用的列,即在哪些列上进行合并。例如,上面的代码中,我们将表格1的A列和表格1的C列与表格2的B列和表格2的D列匹配。
merged.loc[:, 'F'] = merged['H']
其中,loc()方法用于定位符合条件的行和列,这里我们将所有行的F列赋值为H列的值。
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')
需要注意的是,上述代码中需要根据实际表格的列名和路径进行相应的修改。