首页 > 编程语言 >填补表格文件日期列中缺少的天数并用0填充该行其他数据:Python

填补表格文件日期列中缺少的天数并用0填充该行其他数据:Python

时间:2023-12-04 20:32:27浏览次数:29  
标签:表格 Python 列中 df 日期 pd date csv filled

  本文介绍基于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 pd

input_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来填充的。

  至此,大功告成。

标签:表格,Python,列中,df,日期,pd,date,csv,filled
From: https://blog.51cto.com/fkxxgis/8681288

相关文章

  • python中级之字符编码
    小引字符编码(CharacterEncoding)是计算机显示文本的基础,是每一位IT从业者必知的计算机基础知识点,如同数值在计算中如何存储表示,那么基础,那么重要。参考笔记字符编码笔记:ASCII,Unicode和UTF-8-阮一峰的网络日志(ruanyifeng.com)各种编码UNICODE、UTF-8、ANSI、ASCII、G......
  • Python 解析JSON实现主机管理
    JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它以易于阅读和编写的文本形式表示数据。JSON是一种独立于编程语言的数据格式,因此在不同的编程语言中都有对应的解析器和生成器。JSON格式的设计目标是易于理解、支持复杂数据结构和具有良好的可扩展性。JSON数据是......
  • 【python入门之文件操作】---文件操作
    【一】文本处理引入应用程序运行过程中产生的数据最先都是存放于内存中的若想永久保存下来,必须要保存于硬盘中。应用程序若想操作硬件必须通过操作系统而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念用户或应用程序对文件的操作,就是向操作系统发起调用,然后由操作系统......
  • 【python入门之文字符编码】---字符编码
    简介计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如’a’用什么表示,称为"编码";反之,将存储在计算机中的二进制数解析显示出来,称为"解码",如同密码学中的加密和解密。在解码过......
  • 【python基础之可变和不可变数据类型】---python之栈的介绍
    【二】栈【0】引入https://www.hello-algo.com/chapter_stack_and_queue/栈如同叠猫猫,而队列就像猫猫排队。两者分别代表着先入后出和先入先出的逻辑关系。【1】栈的介绍「栈stack」是一种遵循先入后出的逻辑的线性数据结构。我们可以将栈类比为桌面上的一摞盘......
  • 【python基础之可变和不可变数据类型】--- python之堆的介绍
    【一】堆堆--简介:一种基于树的数据结构堆是满足堆特性的完全二叉树,即树中每个节点的值大于或等于其子节点的值。有两种类型的堆:1.最大堆:在最大堆中,每个节点的值都大于或等于其子节点的值,并且根节点在树中具有最大值。2.最小堆:在最小堆中,每个节点的值都小于或等于其子......
  • 【python基础之可变和不可变数据类型】--- python堆栈的相关应用
    【一】用代码实现堆和栈【1】堆#堆的操作是先进先出(FIFO)list_queue=[]foriinrange(0,5):print(f'{i}已入堆(队列)')list_queue.append(i)print('------入堆完毕--------')whilelist_queue:print(f'{list_queue.pop(0)}已出堆(队列)')print('-......
  • 04-python代码审计
    eg1:@app.route('/getUrl',methods=['GET','POST'])defgetUrl():url=request.args.get("url")host=parse.urlparse(url).hostname#解析主机名ifhost=='suctf.cc':return"我扌y......
  • Linux下编译安装python
    1安装依赖yuminstallgccpatchlibffi-develpython-develzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devel-y2下载源码到linuxyuminstall-ywgetwgethttps://www.python.o......
  • Python上课笔记2
    Python中可以一次行输入多个数字的方法a,b=map(int,input().split())#split()函数就是可以自动识别空格断开猜数字游戏这里需要调用一下random这个库importrandomasra#当然我这里给他重新定义了一个名字i=0x=ra.randint(0,100)whilei<3:a=int(i......