Excel中有个非常好用且常用的功能就是自动填充,想必常用excel的小伙伴都了解,那么python能否实现这个功能呢?答案是肯定的,pandas模块可以很好的完成这项工作,而且更加灵活。一起来看下如何用代码实现吧。

首先,我们需要一个测试文件,路径位于本人的电脑桌面,名为“填充.xlsx”,如下截图,长的就像箭头左边那样;现在我要把它做一个自动填充,填充结果成箭头右边那样。

我们的要求是:

  • “编号”,使用数字填充
  • “状态”,使用“yes”,“no”交替填充
  • “日期1”,以天的维度依次递增
  • “日期2”,以月份的维度依次递增
  • “日期3”,以年的维度依次递增

该如何实现呢?我们先理一下解决思路,这个问题我们大概要分两步走:
第一步:读取数据
第二步:分别填充编号,状态,日期1,2,3
我们分别看下代码实现:

读取数据
上一篇文章已经介绍了pandas读取文件的方法,就是使用read_excel()了,我们用jupyter notebook看下于运行结果:

读取的数据并不是向我们想象中的区域,我们的源数据并不是顶格写的,这种情况pandas会把空行和空列自动读取,我们想要只保留数据区域,read_excel()中的“skiprows”参数用于跳过空行,“usecols”参数用来指定选取列区域,这样就可以跳过空行和列,选取我们想要的数据区域啦!附上代码:

import pandas as pd
df=pd.read_excel(r'C:\Users\XZC43\Desktop\填充.xlsx',skiprows=4,usecols="C:H",index_col=None)
print(df)

运行结果如下:

成功读取到我们想要的数据区域,记得用index_col参数把第一行作为column索引。

填充字段

  • 填充“编号”字段
    构造for循环遍历添加数值:
for i in df.index:df['编号'].at[i]=i+1
print(df)

运行结果如下:

成功填充编号字段,但是细心的小伙伴发现了,填充值的类型是float类型的,我们想要的是int类型的,read_excel()中的dtype字段可以设置字段类型,如果直接设置编号字段为int类型,会报错,因为在填充语句运行时,编号字段是存在空值的,空值是无法转换成int整型的,所以,我们要设置dtype参数为str类型。剩下需要填充的字段同理,需要修改读取文件的代码如下:

df=pd.read_excel(r'C:\Users\XZC43\Desktop\填充.xlsx',skiprows=4,usecols="C:H",index_col=None,dtype={'编号':str,'状态':str,'日期1':str,'日期2':str,'日期3':str,})
  • 填充“状态”字段
    在上述for循环的基础上,利用if判断语句实现:
for i in df.index:df['状态'].at[i]='yes' if i%2==0 else 'no'
print(df)

运行结果如下:

成功填充状态字段。

  • 填充“日期1”字段
    需要导入datetime模块,设置一个开始日期,利用for循环遍历添加日期:
from datetime import date,timedeltastart=date(2019,4,1)  #设置起始日期为“2019-04-01”
for i in df.index:df['日期1'].at[i]=start+timedelta(days=i)
print(df)

运行结果如下:

成功填充日期1字段。

  • 填充“日期2”字段
    可惜的是,timedelta函数只有day参数,没有month或year参数,所以我们需要单独计算年和月,其中年份的计算比较方便,所以先讲“日期3”字段的填充,直接for循环遍历,使用date()函数定义新的年,月,日即可:
for i in df.index:df['日期3'].at[i]=date(start.year+1,start.month,start.day)
print(df)

运行结果如下:

成功填充“日期3字段”。

  • 填充“日期2“字段
    该字段之所以最后说,因为月份的填充以上两种方法都不可用,月份只有12个月,牵扯到超过12个月需要递进一年的逻辑,单纯的加数字是无法做到的,这里需要构造一个添加月份的函数,我直接贴上代码,大家可以理解下它的逻辑:
def addmonth(d,md):'''d(日期),md(月份差),yd(年份差),m(月份)'''yd=md//12m=d.month + md%12if m!=12:yd += m//12m=m%12return date(d.year+yd, m, d.day)for i in df.index:df['日期2'].at[i]=addmonth(start,i)print(df)

运行结果如下:

成功填充日期2字段。

好啦!五个字段均按照我们的要求成功填充,最后我们保存下文件,还是放在桌面,名为“填充结果.xlsx”即可。最后整理一下代码如下:

import pandas as pd
from datetime import date,timedeltadef addmonth(d,md):'''d(日期),md(月份差),yd(年份差),m(月份)'''yd=md//12m=d.month+md%12if m!=12:yd += m//12m=m%12return date(d.year+yd,m,d.day)df=pd.read_excel(r'C:\Users\XZC43\Desktop\填充.xlsx',skiprows=4,usecols="C:H",index_col=None,dtype={'编号':str,'状态':str,'日期1':str,'日期2':str,'日期3':str})start=date(2019,4,1)
for i in df.index:df['编号'].at[i]=i+1df['状态'].at[i]='yes'if i%2==0 else 'no'df['日期1'].at[i]=start+timedelta(days=i)df['日期3'].at[i]=date(start.year+i,start.month,start.day)df['日期2'].at[i]=addmonth(start,i)df.set_index('编号')
df.to_excel(r'C:\Users\XZC43\Desktop\填充结果.xlsx')
print('完成!')

结束。

python操作excel(二):自动填充相关推荐

  1. Python操作Excel(二)

    1.openpyxl 本章我们继续讲解基于另一个三方库openpyxl 如何进行Excel文件操作,首先需要先安装它. pip install openpyxl openpyxl  的优点在于,当我们 ...

  2. python 自动填excel_使用python的Excel样式自动填充

    我有一个Excel文件,包含小计和分组Region |Country |State --------|-------------|----- Americas|United States| AA | ...

  3. 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化

    [Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 参考文章: (1)[Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 (2)https: ...

  4. openpyxl删除添加excel列_Python | 如何使用Python操作Excel(二)

    0 前言 在阅读本文之前,请确保您已满足或可能满足一下条件: 请确保您具备基本的Python编程能力. 请确保您会使用Excel. 请确保您的电脑已经安装好Python且pip可用. 请确保您已经读过 ...

  5. Python操作Excel表格(二)

    Python操作Excel表格第二弹 本博客在前一篇博客基础上增加了若干函数,如按列寻找值,查重和增强型查重.数据写入等相关代码.实现了类似Sql的查询(注解中的SQL语句仅做参考,并非可执行SQL) ...

  6. excel空白处自动填充内容怎么操作,excel空白处填充0或上行方法

    excel空白处自动填充内容 1.选择需要将空白处进行填充的区域 2.点击开始–>查找与替换–>定位条件或者按下F5–>点击定位条件. 3.进入定位条件界面后,点击选择空值,再点击确 ...

  7. 全网最全 Python 操作 Excel 教程,建议收藏!

    [欢迎关注微信公众号:厦门微思网络] 微思网络(官网):https://www.xmws.cn/ 0 Python Excel库对比 我们先来看一下python中能操作Excel的库对比(一共九个库) ...

  8. excel进度条与百分比不符_用Python操作Excel数据

    今天给大家展示一个python操作Excel的小demo,demo的例子比较简单,如果大家有什么建议,欢迎可以直接在函数君的微信后台留言. 首先,我们需要安装python在我们的电脑上. 安装的步骤如 ...

  9. 全网最全Python操作Excel教程,建议收藏!

    作者:超级大洋葱806 来源:https://blog.csdn.net/u014779536/article/details/108182833 大家好,猪哥前几天帮学妹爬了个数据,使用到了Pyth ...

  10. 全网最全Python操作Excel教程,赶紧收藏

    0 Python Excel库对比 我们先来看一下python中能操作Excel的库对比(一共九个库): 1 Python xlrd 读取 操作Excel 1.1 xlrd模块介绍 (1)什么是xlr ...

最新文章

  1. 注册报名丨2021 SLT CSRC 研讨会开幕在即,有哪些看点值得关注?
  2. HDU-1042 N! 大数乘法 (C语言)
  3. 报道称:Check Point正在洽谈收购CyberArk
  4. 通过Lazada成功打造自主女包品牌,这2个大学生是怎么做到的?
  5. PLSQL_基础系列11_递归和层次查询CONNECT BY(案例)
  6. c++如何输入数组_从一个数组中找出 N 个数,其和为 M 的所有可能最 nice 的解法...
  7. [Java核心技术(卷I)] - vscode手动编译运行继承类
  8. qt5中服务器文件传输,POST在Qt5中发送JSON文件的请求
  9. 假如啤酒只有七天生命
  10. Spring设计模式之装饰器模式
  11. TCPIP详解卷一概述 学习记录 2020/4/13
  12. 微软商店和防火墙打不开解决方法
  13. word2019使一级标题为第一章,二级标题为1.1的格式
  14. 尝一尝HBuilderX香不香
  15. 苹果自带的APP下载分析统计工具
  16. 怎么自定义服务器的404,如何自定义404页面
  17. 【每日进步一点点】C语言刷题技巧及训练1
  18. 搜索引擎:高级搜索技巧(初)
  19. DNS与CDN知识汇总(前端优化一)
  20. matlab 求复数模值,matlab计算带有复数的函数,最后求复数函数的模,结果里面却有...

热门文章

  1. java兔子繁殖总数_Java 兔子繁殖迭代问题
  2. php 360全景,HTML5 Canvas实现360度全景方法
  3. Shiro中自定义Realm
  4. 安徽师大附中%你赛day3T1 怜香惜玉 解题报告
  5. 中e管家如何投资理财收益最大化
  6. matlab的ezplot绘图函数
  7. [C语言]兔子生崽问题:兔子生崽问题。假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子。试问从一对新生的兔子开始,一年以
  8. 记一次jstack线程诊断
  9. 常用数据库及默认端口
  10. 计算机操作系统-磁盘存储器