下面我就为您详细讲解如何使用Python实现比对两个Excel数据内容并标记出不同的完整实例教程。
步骤一:安装必要的库
为了完成这个任务,我们需要使用以下两个Python库:
pandas
:用于处理Excel数据openpyxl
:用于和Excel文件进行交互
如果您还没有安装这两个库,请先在终端中执行以下命令进行安装:
pip install pandas openpyxl
步骤二:读取Excel数据
首先,我们需要读取两个Excel文件中的数据,并将它们转换成Pandas DataFrame格式,以方便进行比对。假设这两个Excel文件的文件名分别为file1.xlsx
和file2.xlsx
,则可以使用以下代码来读取它们:
import pandas as pd
# 读取文件1的数据
file1 = pd.read_excel('file1.xlsx')
# 读取文件2的数据
file2 = pd.read_excel('file2.xlsx')
步骤三:比对数据并标记不同
有了两个Excel文件的DataFrame格式数据,我们就可以开始比对它们了。我们需要将两个DataFrame合并成一个新的DataFrame,并添加一列来表示这行数据在哪个文件中出现过。接着,我们只需要比对两个文件在每个行的对应位置上的值是否相同,如果不相同就在该行的右侧标记出不同。
以下是完整的代码示例:
import pandas as pd
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.styles import Font, PatternFill
from openpyxl import Workbook
# 读取文件1的数据
file1 = pd.read_excel('file1.xlsx')
# 读取文件2的数据
file2 = pd.read_excel('file2.xlsx')
# 合并数据
merged_data = pd.concat([file1, file2], axis=1, join='inner')
merged_data.columns = ['file1', 'file2']
# 创建新的Excel文件
output_file = 'output.xlsx'
wb = Workbook()
ws = wb.active
# 将比对结果写入Excel文件中
for r in dataframe_to_rows(merged_data, index=False, header=True):
ws.append(r)
# 比对列的位置(即第一列为0)
col_idx = len(merged_data.columns) - 1
# 如果两个文件的值不同,标记出不同
if r[1] != r[0]:
ws.cell(row=ws.max_row, column=col_idx+1).fill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type='solid') # 红色填充
ws.cell(row=ws.max_row, column=col_idx+1).font = Font(color='FFFFFF') # 白色字体
# 保存Excel文件
wb.save(output_file)
在上面的示例中,我们首先使用concat()
函数合并两个DataFrame,然后创建一个新的Excel文件,并将合并后的数据写入该文件中。接着,我们比对了两个文件在每个行的对应位置上的值,并在不同的位置标记出不同。最后,我们将标记后的结果保存到新的Excel文件中。
示例一:使用示例数据
假设我们有两个Excel文件,其中一个包含以下数据:
ID Name Score
1 Alice 90
2 Bob 85
3 Charlie 92
另一个包含以下数据:
ID Name Score
1 Alice 88
2 Bob 85
3 Charlie 92
如果我们对这两个文件进行比对,我们将会得到以下结果:
file1
ID Name Score
1 Alice 90
2 Bob 85
3 Charlie 92
file2
ID Name Score
1 Alice 88
2 Bob 85
3 Charlie 92
output
ID Name file1 file2
1 Alice 90 88
2 Bob 85 85
3 Charlie 92 92
在新的Excel文件中,我们可以看到第一列显示的是原始文件中的数据,第二列显示的是比对后的结果,红色的单元格表示两个文件在该位置的值不同。
示例二:使用实际数据
下面我以两个实际的Excel文件为例来演示如何进行比对并标记不同的过程。
假设有两个Excel文件,其文件名分别为data1.xlsx
和data2.xlsx
。这两个文件每个文件都包含两个sheet,sheet名称分别为Sheet1和Sheet2。以下是数据示例:
data1.xlsx – Sheet1:
ID | Name | Age |
---|---|---|
1 | Alice | 20 |
2 | Bob | 25 |
3 | Tom | 30 |
data1.xlsx – Sheet2:
ID | Gender | City |
---|---|---|
1 | F | Beijing |
2 | M | Shanghai |
3 | M | Guangzhou |
data2.xlsx – Sheet1:
ID | Name | Age |
---|---|---|
1 | Alice | 20 |
2 | Bob | 25 |
3 | Tom | 31 |
data2.xlsx – Sheet2:
ID | Gender | City |
---|---|---|
1 | F | Beijing |
2 | M | Shanghai |
3 | M | Shenzhen |
现在我们需要对这两个文件进行比对并标记不同。我们可以使用以下代码:
import pandas as pd
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.styles import Font, PatternFill
from openpyxl import Workbook
# 读取文件1的数据
file1_sheet1 = pd.read_excel('data1.xlsx', sheet_name='Sheet1')
file1_sheet2 = pd.read_excel('data1.xlsx', sheet_name='Sheet2')
# 读取文件2的数据
file2_sheet1 = pd.read_excel('data2.xlsx', sheet_name='Sheet1')
file2_sheet2 = pd.read_excel('data2.xlsx', sheet_name='Sheet2')
# 合并Sheet1数据
merged_sheet1 = pd.merge(file1_sheet1, file2_sheet1, on='ID', how='inner')
merged_sheet1.columns = ['ID', 'Name', 'Age (file1)', 'Age (file2)']
# 合并Sheet2数据
merged_sheet2 = pd.merge(file1_sheet2, file2_sheet2, on='ID', how='inner')
merged_sheet2.columns = ['ID', 'Gender (file1)', 'City (file1)', 'Gender (file2)', 'City (file2)']
# 创建新的Excel文件
output_file = 'output.xlsx'
wb = Workbook()
ws1 = wb.create_sheet('Sheet1')
ws2 = wb.create_sheet('Sheet2')
# 将比对结果写入Excel文件中 - Sheet1
for r in dataframe_to_rows(merged_sheet1, index=False, header=True):
ws1.append(r)
# 比对列的位置(即第一列为0)
col_idx = len(merged_sheet1.columns) - 1
# 如果两个文件的值不同,标记出不同
if r[2] != r[3]:
ws1.cell(row=ws1.max_row, column=col_idx+1).fill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type='solid') # 红色填充
ws1.cell(row=ws1.max_row, column=col_idx+1).font = Font(color='FFFFFF') # 白色字体
# 将比对结果写入Excel文件中 - Sheet2
for r in dataframe_to_rows(merged_sheet2, index=False, header=True):
ws2.append(r)
# 比对列的位置(即第一列为0)
col_idx = len(merged_sheet2.columns) - 1
# 如果两个文件的值不同,标记出不同
if r[1] != r[3] or r[2] != r[4]:
ws2.cell(row=ws2.max_row, column=col_idx+1).fill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type='solid') # 红色填充
ws2.cell(row=ws2.max_row, column=col_idx+1).font = Font(color='FFFFFF') # 白色字体
# 保存Excel文件
wb.save(output_file)
在上面的示例中,我们首先使用read_excel()
函数读取了两个Excel文件中的数据,然后使用merge()
函数将两个文件中的数据合并到一起。接着,我们创建一个新的Excel文件,并将合并后的数据写入文件中。在这个示例中,我们没有使用concat()
函数,而是使用了merge()
函数,因为在这个实际的例子中,我们需要按照ID
这一列来合并数据。
最后,我们使用了两个循环来将结果写入Excel文件中,以及在不同的位置标记出不同。请注意,在Sheet2中,我们需要比对每一行的两个不同的位置。
好了,以上就是如何使用Python实现对比两个Excel数据内容并标记出不同的完整实例教程。希望这能帮助到您。