当前位置: 首页 > article >正文

Python实现Excel行列转换

这两天公司在进行人事系统切换,HR小同事焦头烂额的跑过来问我,有没有办法弄excel行列转换呀?我想了想:“用Excel的行列转换不就可以了吗?”啪啦啪啦的说了一堆,然后打开Excel给她演示。小同事不屑一顾:“这么简单还要问你呀!你看看我这个数据源,是所有员工的考勤数据,旧系统是行显示,新系统导入要按照列统计。要按照人员进行排列,还有缺勤的要留空…”.一下子把我弄懵了,一下子还没想出简单快捷的办法。小同事又接着说,我现在手工一个个的弄,还不知道弄到什么时候呢。要不贴错了就苦逼了。看来,遇到棘手的还是想到了IT,我拍拍胸膛,这事包我身上。小同事一脸疑惑:”行吗”?”当然”。看来要再次搬出Python的看家伎俩了。没办法,谁让Python处理数据那是天生的?

原数据格式:

目标数据格式:

根据HR同事的要求,对需求进行了分析并归纳如下步骤:

  1. 读取数据源,将数据装入list中
  2. 从list中提取人员名单,去重
  3. 根据人员名单,筛选考勤记录,装入临时list中,进行日期处理,并返回到最终list, 删除临时表。
  4. 最终list写入原excel,完成。

参考代码如下:

from openpyxl import load_workbook

fname="source.xlsx"

def remove_duplicates(lst):#去重

    return [x for i, x in enumerate(lst) if i == lst.index(x)]

def two_to_one(lst):

    a=[]

    for line in lst:

        for perline in line:

            a.append(perline)

    return a

per_line=[]

total_line=[]

per_name_list=[]

name_list=[]

wb=load_workbook(fname,data_only=True) #读取数据源

ws=wb["Sheet4"]

for  row in ws.iter_rows():

    i=0

    for cell in row:

        if i==1 or i==2 or i==3:

            per_line.append(cell.value)

        if i==1:

            per_name_list.append(cell.value)

        i+=1

    total_line.append(per_line)

    name_list.append(per_name_list)

    per_line=[]

    per_name_list=[]

name_list2=remove_duplicates(name_list[1:])

print(name_list2) #打印去重后的名单

e_per_line=[]

e_line=[]

new_line=[]

new_line2=[]

all_list=[]

for line in name_list2:

    #print(line)显示人名

    for perline in total_line:

        if line[0]==perline[0]:

            e_per_line.append(perline[1])

            e_per_line.append(perline[2])

        if len(e_per_line)!=0:

            e_line.append(e_per_line)

        e_per_line=[]

    #print(e_line)

    new_line=two_to_one(e_line)

    new_line2=line+new_line

    #print(new_line2)

    all_list.append(new_line2)

    print("------------------")

    e_line=[]

wb2=load_workbook('source.xlsx')#回写处理后的数据

ws2=wb2["Sheet31"]

for line in all_list:

    ws2.append(line)

wb2.save('source.xlsx')


http://www.kler.cn/a/464788.html

相关文章:

  • 【机器学习:二、线性回归模型】
  • 【网络】ARP表、MAC表、路由表
  • 海南省大数据发展中心:数据资产场景化评估案例手册(第二期)
  • 设计模式之桥接设计模式
  • 【新教程】华为昇腾NPU的pytorch环境搭建
  • 直播预告丨社区年度交流会 《RTE 和 AI 融合生态洞察报告 2024》发布
  • 算法 class 005 (对数器C语言实现)
  • 第一次作业
  • Java项目常见基础问题汇总(6)
  • 基于Golang的网络安全靶场设计与实现
  • 利用深度学习进行系统健康监控:智能运维的新纪元
  • Vue 中el-table-column 进行循环,页面没渲染成功
  • 并联带阻滤波器带通滤波器对幅值和相位的影响(IIR)
  • C++ 设计模式:组合模式(Composite Pattern)
  • QT----------多媒体
  • HarmonyOS Next ArkUI @State @Prop @Link @Provide @Consume笔记
  • EasyExcel简介和读写操作
  • IoC设计模式详解:控制反转的核心思想
  • PyTorch 中 coalesce() 函数详解与应用示例
  • Linux之ARM(MX6U)裸机篇----6.BSP工程管理实验
  • Vue 自定义指令
  • 全国知名网络安全赛事西湖论剑·杭州网络安全技能大赛启动报名
  • 【C++/CMake】从静态库到动态库:一行改动解决 “找不到 -ljsoncpp” 链接报错
  • 第二十六天 自然语言处理(NLP)词嵌入(Word2Vec、GloVe)
  • TTL 传输中过期问题定位
  • 【网络协议】路由信息协议 (RIP)