根据要求合并excel表格中数据

28 篇文章 1 订阅
16 篇文章 0 订阅

描述:目前存在两个表格,一个表格是姓名+性别,另外一个表格是性别+手机号。目前两个表格中的姓名也不是完全相同的。

 

要求:根据名字,将两个表中的数据合并。

方法一: 【直接使用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库实现简单的多!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值