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

如何从指定CSV文件中获取小时粒度的数据?

提取CSV中的小时粒度数据方案

嘿,我来帮你搞定这个小时粒度数据提取的问题!你的CSV数据里既有仅含时间戳的空值行,也有带数值的有效记录,咱们用Python工具来处理最省心,下面分两种常用方法给你演示:

方法一:用Pandas(推荐,适合大数据量)

Pandas是处理时间序列数据的神器,几步就能完成聚合:

步骤1:读取并预处理CSV

首先导入Pandas,然后读取你的CSV文件,解析时间戳并处理时区:

import pandas as pd

# 读取CSV,指定列名,自动解析时间戳
df = pd.read_csv(
    'your_file.csv',
    names=['timestamp', 'value1', 'value2'],
    parse_dates=['timestamp'],
    infer_datetime_format=True
)

# 确保时间戳带时区(如果你的数据里有时区标识,Pandas会自动识别)
df['timestamp'] = pd.to_datetime(df['timestamp'], utc=True)

# 可选:过滤掉value1和value2都为空的无效行
df = df.dropna(subset=['value1', 'value2'], how='all')

步骤2:按小时聚合数据

把时间戳设为索引,然后用resample按小时重采样,你可以根据需求选择聚合方式(均值、求和、第一个值等):

# 设置时间戳为索引
df = df.set_index('timestamp')

# 按小时取均值(替换成sum()/first()/max()可实现其他聚合逻辑)
hourly_data = df.resample('H').mean()

# 查看结果
print(hourly_data)

如果你的CSV行是用空格分隔的(从你提供的内容看可能存在格式问题),只需要在read_csv里加上sep='\s+'参数即可正确解析。

方法二:纯Python实现(适合小数据量)

如果不想用第三方库,用标准库也能实现:

import csv
from collections import defaultdict
from datetime import datetime

# 用字典存储每个小时的数值列表
hourly_groups = defaultdict(lambda: {'value1': [], 'value2': []})

with open('your_file.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        if len(row) < 3:
            continue  # 跳过无效行
        ts_str, v1, v2 = row
        # 解析时间戳并截断到小时
        timestamp = datetime.fromisoformat(ts_str)
        hour_key = timestamp.replace(minute=0, second=0, microsecond=0)
        # 添加有效数值
        if v1.strip():
            hourly_groups[hour_key]['value1'].append(float(v1))
        if v2.strip():
            hourly_groups[hour_key]['value2'].append(float(v2))

# 计算每个小时的均值
hourly_result = {}
for hour, values in hourly_groups.items():
    avg_v1 = sum(values['value1']) / len(values['value1']) if values['value1'] else None
    avg_v2 = sum(values['value2']) / len(values['value2']) if values['value2'] else None
    hourly_result[hour] = {'value1': avg_v1, 'value2': avg_v2}

# 输出结果
for hour, data in hourly_result.items():
    print(f"{hour}: value1={data['value1']:.2f}, value2={data['value2']:.2f}")

两种方法都能帮你得到按小时粒度聚合的数据,根据你的数据量和需求选就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:28:00