编写Python脚本补全CSV中缺失的15分钟间隔流量数据行
Python脚本补全CSV中缺失的15分钟时间步记录
针对你的需求,我们可以用pandas库高效处理8万行的CSV数据,自动识别并补全缺失的15分钟时间步记录,具体方案如下:
核心思路
- 将分散的
Date和Time列合并为完整时间戳,作为数据索引 - 生成从数据起始到结束时间的完整15分钟间隔时间序列
- 基于完整时间序列重新索引原始数据,自动插入缺失行
- 填充缺失行的
ID和Flow字段(Flow设为NA),最后拆分回原列格式并保存
完整代码实现
import pandas as pd # 1. 读取原始CSV文件(根据实际分隔符调整sep参数,示例适配制表符/空格混合的格式) df = pd.read_csv('your_input.csv', sep='\s+', header=None, names=['ID', 'Date', 'Time', 'Flow']) # 2. 合并日期和时间为标准时间戳,指定日期格式为MM/DD/YYYY df['Datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Time'], format='%m/%d/%Y %H:%M') df.set_index('Datetime', inplace=True) # 3. 生成完整的15分钟间隔时间序列 full_time_index = pd.date_range(start=df.index.min(), end=df.index.max(), freq='15T') # 4. 重新索引补全缺失行,填充ID和Flow字段 df_filled = df.reindex(full_time_index) # 填充ID(假设所有记录ID均为USGS,若有多个ID需按ID分组后单独处理) df_filled['ID'] = df_filled['ID'].fillna('USGS') # 将Flow缺失值设为NA df_filled['Flow'] = df_filled['Flow'].fillna('NA') # 5. 拆分时间戳回Date和Time列,恢复原列顺序 df_filled['Date'] = df_filled.index.strftime('%m/%d/%Y') df_filled['Time'] = df_filled.index.strftime('%H:%M') df_filled = df_filled[['ID', 'Date', 'Time', 'Flow']] # 6. 保存补全后的CSV文件 df_filled.to_csv('your_output.csv', sep='\t', index=False)
关键细节说明
- 分隔符适配:如果原始CSV是逗号分隔,将
sep='\s+'改为sep=','即可 - 多ID场景:若数据包含多个ID,需先按
ID分组,再对每组执行上述补全逻辑 - 日期格式调整:如果原始日期格式为DD/MM/YYYY,修改
pd.to_datetime中的format参数为'%d/%m/%Y %H:%M' - 性能保障:pandas处理8万行数据效率极高,无需担心运行速度问题
内容的提问来源于stack exchange,提问作者Andrew_Weather
相关产品推荐
相关产品推荐

