You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

转置亚日尺度气候数据:5分钟步长降水数据格式转换需求

问题描述

我有一份CSV格式的5分钟步长降水数据,结构如下:

DateTime,PR00,PR05,PR10,PR15,PR20,PR25,PR30,PR35,PR40,PR45,PR50,PR55
12/31/2013 0:00,0,0.4,0.6,0,0,0,0,0,0,0.2,0.6,0
12/31/2013 1:00,0,0.4,0.4,0.2,0.6,0.6,1.2,0.4,0,0.2,0,0.4
12/31/2013 2:00,0,0,0,0,0,0,0,0,0,0,0,0
12/31/2013 3:00,0,0,0,0,0,0,0,0,0,0,0,0
12/31/2013 4:00,0,0.2,0,0,0,0,0,0.2,0,0,0,0
12/31/2013 5:00,0,0,0,0,0,0,0,0,0,0,0,0
12/31/2013 6:00,0,0,0,0,0,0,0,0,0,0,0,0

其中第一列为1小时步长的日期时间,其余列对应每小时内5分钟间隔的降水记录。需要将其转换为包含**日期时间(Date)和降水(Precip)**两列的DataFrame,目标格式示例如下:

Date,Precip
12/31/2013 0:00,0
12/31/2013 0:05,0.4
12/31/2013 0:10,0.6
12/31/2013 0:15,0
12/31/2013 0:20,0
12/31/2013 0:25,0
12/31/2013 0:30,0
12/31/2013 0:35,0
12/31/2013 0:40,0
12/31/2013 0:45,0.2
12/31/2013 0:50,0.6
12/31/2013 0:55,0
...
解决方案

使用Pandas可快速完成数据格式转换,具体实现如下:

完整代码

import pandas as pd

# 读取CSV文件并解析日期时间列
df = pd.read_csv('your_file.csv', parse_dates=['DateTime'])

# 将宽表转为长表,拆分每小时内的5分钟降水记录
melted_df = df.melt(id_vars='DateTime', var_name='MinuteTag', value_name='Precip')

# 从列名中提取分钟偏移量(如PR00→0分钟)
melted_df['Minutes'] = melted_df['MinuteTag'].str.extract(r'(\d+)').astype(int)

# 计算精确的5分钟时间戳
melted_df['Date'] = melted_df['DateTime'] + pd.to_timedelta(melted_df['Minutes'], unit='minutes')

# 整理目标列并按时间排序
result_df = melted_df[['Date', 'Precip']].sort_values('Date').reset_index(drop=True)

# 可选:将日期格式化为示例中的字符串样式
result_df['Date'] = result_df['Date'].dt.strftime('%m/%d/%Y %H:%M')

# 查看转换结果
print(result_df.head(12))

代码说明

  • melt函数将原始宽表结构转为长表,把每一行的12个降水值拆分为独立行
  • 通过正则表达式从PRxx列名中提取分钟数,结合pd.to_timedelta生成精确的5分钟时间偏移
  • 最后筛选目标列并按时间排序,得到符合要求的DataFrame

如果需要导出为CSV文件,添加以下代码:

result_df.to_csv('converted_precip.csv', index=False)

内容的提问来源于stack exchange,提问作者Rancho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 14:58:10