博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Pandas_实现数字顺序填充、指定值交替填充、日期顺序填充(按日、月、年)
阅读量:5299 次
发布时间:2019-06-14

本文共 2657 字,大约阅读时间需要 8 分钟。

excel表的数据情况如下:下面数据区域的左边和上边都是空,这会导致我们读取近pathon里时,结构不是我们要的,需要用到skiprow和usecols来控制我们想要读取的区域

 

整合:

 

import pandas as pdfrom datetime import date,timedeltabooks = pd.read_excel("../004/Books.xlsx",skiprows=3,usecols="C:F",dtype={
"ID":str,"InStore":str,"Date":str})# books.dtypes# 设置个起始日期start = date(2019,1,1)# 设置个月份递增的函数def add_month(d,md): y = md // 12 m = d.month + md % 12 if m !=12: y += m // 12 m = m % 12 return date(d.year + y, m,d.day) for i in books.index: books["ID"].at[i]=i+1 books["InStore"].at[i]="YES" if i % 2 ==0 else "ON"# books["Date"].at[i]=start + timedelta(days=i) # 逐日增加# books["Date"].at[i]=add_month(start,i) # 逐月增加 books["Date"].at[i]=date(start.year+i,start.month,start.day) # 逐年增加print(books)# 设置索引为ID列books.set_index("ID",inplace=True)# 将设置好的数据存入名为:out_books的excel表里books.to_excel("out_books.xlsx")print("Done!")

结果图:

 

 分解:

import pandas as pd# skiprows=3 表示跳过上面的3行后再读取# usecols="C:F" 表示读取excel里C到F的列,如果时要跳着选择列可以写成:usecols="C,D,E,F"books = pd.read_excel("../004/Books.xlsx",skiprows=3,usecols="C:F",dtype={
"ID":str,"InStore":str,"Date":str})print(books.head())

 

 一、为ID列自动填充1-20的数字 :

# ID列的数据都是NaN,NaN的类型是浮点数,如果不先转换ID列的数据类型,直接给ID填充赋值后的数据也是浮点类型,因此我们需要在导入数据时就把# 字段的类型先做转换,但是因为NaN的数据不让我们转为int,会报错,我们可以用个小技巧,把NaN的列先转换为str类型,这样一会就可以正常赋值print("=====>",books["ID"].dtypes)  # 这句是为了查看ID的数据类型# 下面开始给指定列赋值# 方法1:for i in books.index:    books["ID"].at[i]=i+1    # 方法2:for i in range(0,20):#     books["ID"].at[i]=i+1   这是先找出指定的那一列(Series),再找到要替换的那一行    books.at[i,"ID"]=i+1     # 这是直接在二维表(DataFrame)里指定第几行,第几列要替换    print(books)print("======>",books.dtypes)  # 这句是查看books数据里所有列的数据类型

结果图:

 

 

 二、给 InStore 列 替换式的填充 YES 和 NO :

for i in books.index:    books["InStore"].at[i]="YES" if i % 2 ==0 else "NO"print(books.head())

结果图:

 

三、 按日期填充数据:

# 先导入datetime库 from datetime import date,timedelta# 先设置一个起始日期start = date(2019,1,1)

 

 1、给 Date 列的日期逐日增加填充 

# 按日给Date列填充时间for i in books.index:    books["Date"].at[i]=start+timedelta(days=i)   # 用 timedelta(days=i) 实现按日填充#     books["Date"].at[i]=date(start.year,start.month,start.day+i)    也可以这么写来实现逐日填充print(books)

结果图:

 

 2、给 Date 列的日期按年填充  :

for i in books.index:    books["Date"].at[i]=date(start.year+i,start.month,start.day)    print(books.head())

结果图:

 

 3、给 Date 列的日期按月份填充,需要设置个函数实现:

# d:传入的起始日期# md: 要增加多少个月def add_month(d,md):    y = md //12   # 要增加的月份能换算成多少年    m = d.month + md % 12   # md % 12:要增加的月份除以12后的余数(即剩下多少个月)    if m !=12:        y += m // 12        m = m % 12    return date(d.year+y,m,d.day)
# 用for 循环填充for i in books.index:    books["Date"].at[i]=add_month(start,i)print(books)

结果图:

 

转载于:https://www.cnblogs.com/wodexk/p/10802868.html

你可能感兴趣的文章
面对问题,如何去分析?(分析套路)
查看>>
Excel-逻辑函数
查看>>
面对问题,如何去分析?(日报问题)
查看>>
数据分析-业务知识
查看>>
BZOJ1208[HNOI2004]宠物收养场——treap
查看>>
nodejs vs python
查看>>
poj-1410 Intersection
查看>>
艰难中前行
查看>>
[pytorch学习]1.pytorch ubuntu安装
查看>>
阿里云CentOS 安装配置ASPNET Core
查看>>
repeater 分页显示数据
查看>>
HDU-3666 THE MATRIX PROBLEM
查看>>
鼠标悬停放大图片 - 漂亮
查看>>
【转载】博士后了
查看>>
IDEA操作git的一些常用技巧
查看>>
Java多线程基础(一)
查看>>
TCP粘包拆包问题
查看>>
Java中Runnable和Thread的区别
查看>>
SQL Server中利用正则表达式替换字符串
查看>>
POJ 1015 Jury Compromise(双塔dp)
查看>>