描述:目前存在两个表格,一个表格是姓名+性别,另外一个表格是性别+手机号。目前两个表格中的姓名也不是完全相同的。
要求:根据名字,将两个表中的数据合并。
方法一: 【直接使用python基础实现】
示例代码:
import openpyxl
def load_data(file_path):
# 读取数据
load_data = openpyxl.load_workbook(file_path)
# 获取sheet0中数据
table_data = load_data[load_data.sheetnames[0]]
# print(table_data)
# 循环读取每行数据
row_data_list = []
count = 0
for row in table_data.iter_rows():
count += 1
if count == 1:
# 保存表头
title = [row[i].value for i in range(len(row))]
continue
# 判断行为空跳过循环
if not row:
continue
# 读取每一行数据
data = [row[i].value for i in range(len(row))]
# print(data)
row_data_list.append(data)
# print(row_data_list)
return title, row_data_list
def merge_data(title, row_data_list1, row_data_list2):
dic = {}
for data in row_data_list1:
name = data[1]
sex = data[2]
dic[name] = {}
dic[name]['sex'] = sex
for data in row_data_list2:
name = data[1]
phone = data[2]
if not dic.get(name):
dic[name] = {}
dic[name]['phone'] = []
dic[name]['phone'].append(phone)
else:
if not dic[name].get('phone'):
dic[name]['phone'] = []
dic[name]['phone'].append(phone)
else:
dic[name]['phone'].append(phone)
print(dic)
# 将字典数据转换为列表数据
datas_list = []
for key, value in dic.items():
datas_list.append([key, value.get("sex", ""), value.get("phone", "")])
# 将表头放到每个子列表中的第一个位置
datas_list.insert(0, title)
print(datas_list)
return datas_list
def save_data(datas_list):
# 创建新的excel对象
new_excel = openpyxl.Workbook()
sheet = new_excel.active
for i in range(1, len(datas_list) + 1):
for j in range(1, 4):
sheet.cell(row=i, column=j, value=str(datas_list[i - 1][j - 1]))
new_excel.save('data/个人信息表.xlsx')
if __name__ == '__main__':
file_path1 = "data/姓名_性别.xlsx"
file_path2 = "data/姓名_手机号.xlsx"
# 读取数据
title, row_data_list1 = load_data(file_path1)
title, row_data_list2 = load_data(file_path2)
# merge数据
datas_list = merge_data(title, row_data_list1, row_data_list2)
# 保存数据到文件中
save_data(datas_list)
运行结果:
方法二: 【使用pandas库来实现】
示例代码:
import pandas as pd
data_xlsx1 = pd.read_excel('data/姓名_性别.xlsx', sheet_name="Sheet1")
data_xlsx2 = pd.read_excel('data/姓名_手机号.xlsx', sheet_name="Sheet1")
print(data_xlsx1)
print(data_xlsx2)
# 合并表格,采用外连接
result = pd.merge(data_xlsx1, data_xlsx2, how="outer", on="姓名")
print(result)
result.to_excel("data/个人信息_pd.xlsx", sheet_name="Sheet1", index=False, header=True)
运行结果:
上述结果根据具体要求适当修改即可,可见使用pandas库实现简单的多!