Python逐日填补Excel中的日期并用0值填充缺失日期的数据

  本文介绍基于Python语言,读取一个不同的列表示不同的日期.csv格式文件,将其中缺失的日期数值加以填补;并用0值对这些缺失日期对应的数据加以填充的方法。

  首先,我们明确一下本文的需求。现在有一个.csv格式文件,其第一列表示日期,用2021001这样的格式记录每一天的日期;其后面几列则是这一日期对应的数据。如下图所示。

  从上图可以看到,第一列(紫色框内)的日期有很多缺失值,例如一下子就从第001天跳到了005天,然后又直接到了042天。我们希望,基于这一文件,首先逐日填补缺失的日期;其次,对于这些缺失日期的数据(后面四列),就都用0值来填充即可。最后,我们希望用一个新的.csv格式文件来存储我们上述修改好的数据。

  知道了需求,我们就可以开始代码的撰写;具体代码如下。

# -*- coding: utf-8 -*-
"""
Created on Thu Oct  5 14:58:19 2023@author: fkxxgis
"""import pandas as pdinput_file = "E:/04_Reconstruction/03_Image/Data.csv"
output_file = "E:/04_Reconstruction/03_Image/Data_AllYear.csv"df = pd.read_csv(input_file)
df['time'] = pd.to_datetime(df['time'], format='%Y%j')df.set_index('time', inplace=True)start_date = pd.to_datetime('2021001', format='%Y%j')
end_date = pd.to_datetime('2021365', format='%Y%j')
date_range = pd.date_range(start=start_date, end=end_date, freq='D')df_filled = df.reindex(date_range, fill_value=0)df_filled.reset_index(inplace=True)
df_filled['time'] = df_filled['index'].dt.strftime('%Y%j')df_filled.drop(df_filled.columns[0], axis=1, inplace=True)cols = list(df_filled.columns)
cols = [cols[-1]] + cols[:-1]
df_filled = df_filled[cols]df_filled.to_csv(output_file, index=False)

  其中,我们首先导入所需的库,并定义输入和输出文件的路径。随后,我们使用pd.read_csv方法读取输入文件,并将数据存储于df中。

  接下来,我们使用pd.to_datetime方法将df中的时间列转换为日期时间格式,并使用set_index方法将时间列设置为DataFrame的索引。

  随后,计算需要填补的日期范围——我们将字符串'2021001'转换为日期时间格式并作为结束日期,将字符串'2021365'转换为日期时间格式并作为结束日期,使用pd.date_range方法生成完整的日期范围,频率为每天。

  接下来,使用reindex方法对DataFrame进行重新索引,以包含完整的日期范围,并使用0填充缺失值。其次,使用reset_index方法将索引列还原为普通列,并使用dt.strftime方法将时间列转换回字符串格式。

  最后,我们使用drop方法删除第一列(否则最终输出的结果文件的第一列是前面的索引值,而不是time列),并将最后一列(也就是time列)移到第一列。随后,即可将修改后的DataFrame保存到输出文件中,使用to_csv方法,并设置index=False以避免保存索引列。

  运行上述代码,即可得到如下图所示的结果文件。

  可以看到,此时文件中已经是逐日的数据了,且对于那些新增日期的数据,都是0来填充的。

  至此,大功告成。

欢迎关注:疯狂学习GIS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/125567.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.7.C++项目:仿muduo库实现并发服务器之Poller模块的设计

项目完整在: 文章目录 一、Poller模块:描述符IO事件监控模块二、提供的功能三、实现思想(一)功能(二)意义(三)功能设计 四、封装思想五、代码(一)框架&#…

轻量级网络IP扫描器WatchYourLAN

什么是 WatchYourLAN ? WatchYourLAN 是一款带有 Web GUI 的轻量级网络 IP 扫描器。支持使用不同的主题和色彩模式进行个性化设置。 准备工作 扫描网络,首先要找到对应的网络接口,一般常见的包括 eth0、lo、docker0 等,可以在 SS…

Spring的依赖注入(DI)以及优缺点

Spring的依赖注入(DI):解释和优点 依赖注入(Dependency Injection,简称DI)是Spring框架的核心概念之一,也是现代Java应用程序开发的重要组成部分。本文将深入探讨DI是什么,以及它的…

react项目从webpack迁移到vite的解决方案

虽然webpack是前端工程编译工具的王者,但是最近vite牛逼吹的震天响,说什么开发/生产打包速度甩webpack 100条街。不管是不是事实,总得尝试一下吧。 于是说干就干,在网上找了很多资料,终于搞定了,以下就是r…

[Linux]线程互斥

[Linux]线程互斥 文章目录 [Linux]线程互斥线程并发访问问题线程互斥控制--加锁pthread_mutex_init函数pthread_mutex_destroy函数pthread_mutex_lock函数pthread_mutex_unlock函数锁相关函数使用示例使用锁的细节加锁解锁的实现原理 线程安全概念常见的线程不安全的情况常见的…

C++:stl:stack、queue、priority_queue介绍及模拟实现和容量适配器deque介绍

本文主要介绍c中stl的栈、队列和优先级队列并对其模拟实现,对deque进行一定介绍并在栈和队列的模拟实现中使用。 目录 一、stack的介绍和使用 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue的介绍和使用 1.queue的介绍 2.queue的使用 3.queue的…

“在 ArchiMate EA 建模中的组合关系:构建块和依赖关系

简介 在企业架构(EA)建模领域,结构关系在描绘架构内静态一致性方面起着至关重要的作用。其中一个关键的结构关系是组合关系,这是 ArchiMate 语言中深植的概念,提供了一个全面的框架,用于表达元素如何组合形…

正点原子嵌入式linux驱动开发——TF-A移植

经过了之前的学习,除了TF-A的详细启动流程仍待更新,TF-A的使用和其对应的大致启动流程已经进行过了学习。但是当我们实际做产品时,硬件平台肯定会和ST官方的有区别,比如DDR容量会改变,自己的硬件没有使用到官方EVK开发…

Ubuntu使用cmake和vscode开发自己的项目,引用自己的头文件和openCV

创建文件夹 mkdir my_proj 继续创建include 和 src文件夹,形成如下的目录结构 用vscode打开项目 创建add.h #ifndef ADD_H #define ADD_Hint add(int numA, int numB);#endif add.cpp #include "add.h"int add(int numA, int numB) {return numA nu…

盒子阴影和网页布局

盒子阴影 box-shadow: 10px 10px 10px 4px rgba(0,0,0,.3);//最后一个是透明度 传统网页布局的三种方式 标准流 就是按照规定好的默认方式排列 1.块级元素:div、hr、p、h1~h2、ul、ol、dl、form、table 行内元素会按照书顺序,从左到右顺序排列&#…

黑豹程序员-架构师学习路线图-百科:Git/Gitee(版本控制)

文章目录 1、什么是版本控制2、特点3、发展历史4、SVN和Git比较5、Git6、GitHub7、Gitee(国产)8、Git的基础命令 1、什么是版本控制 版本控制系统( Version Control )版本控制是一种管理和跟踪软件开发过程中的代码变化的系统。它…

博途1200/1500 ALT指令

SMART PLC的ALT指令实现代码,请查看下面文章博客 SMART PLC如何构造ALT指令_smart200类似alt指令-CSDN博客单按钮启停这些老生常谈的问题,很多人感兴趣。这篇博文讨论下不同的实现方法,希望对大家有所帮助。指令虽然简单,但是在编程的时候合理使用对我们高效率编程帮助还是…