Python检查Excel时序数据并填充缺失日期所对应数据

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

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

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

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

python 复制代码
# -*- 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来填充的。

至此,大功告成。

相关推荐
哆啦A梦的口袋呀15 分钟前
基于Python学习《Head First设计模式》第九章 迭代器和组合模式
python·学习·设计模式
千|寻15 分钟前
【画江湖】langchain4j - Java1.8下spring boot集成ollama调用本地大模型之问道系列(第一问)
java·spring boot·后端·langchain
程序员岳焱29 分钟前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
后端·sql·mysql
龚思凯35 分钟前
Node.js 模块导入语法变革全解析
后端·node.js
sponge'35 分钟前
opencv学习笔记2:卷积、均值滤波、中值滤波
笔记·python·opencv·学习
天行健的回响38 分钟前
枚举在实际开发中的使用小Tips
后端
wuhunyu43 分钟前
基于 langchain4j 的简易 RAG
后端
techzhi43 分钟前
SeaweedFS S3 Spring Boot Starter
java·spring boot·后端
Channing Lewis1 小时前
sql server如何创建表导入excel的数据
数据库·oracle·excel
databook1 小时前
概率图模型:机器学习的结构化概率之道
python·机器学习·scikit-learn