您当前的位置: 首页 > 

IT之一小佬

暂无认证

  • 3浏览

    0关注

    1192博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

IT之一小佬 发布时间:2022-09-24 11:37:45 ,浏览量:3

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

 

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

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

关注
打赏
1665675218
查看更多评论
立即登录/注册

微信扫码登录

0.0786s