如何在Pandas中拆分/排序DataFrame并按日/月分组观测数据?
解决观测数据按日/月分组的步骤
首先,你的原始pd.read_csv未正确处理以#开头的日期分隔行,需要先重新读取整理数据,再完成分组操作,具体步骤如下:
1. 重新读取并清洗数据
原数据中#开头的行是日期标识,需要提取这些日期并将对应数据行匹配到所属日期:
import pandas as pd from datetime import datetime # 逐行读取文件内容 with open("./INM00043333-data.txt", "r") as f: lines = f.readlines() # 初始化存储变量 data_rows = [] current_date = None for line in lines: line = line.strip() if not line: continue # 识别日期行(#开头) if line.startswith("#"): date_str = line.split()[1] current_date = datetime.strptime(date_str, "%Y-%m-%d") else: # 拆分数据行并绑定当前日期(字段名根据实际数据调整) parts = line.split() row = { "date": current_date, "time": parts[0], "temp": float(parts[1]), "dew_point": float(parts[2]), "pressure": float(parts[3]) } data_rows.append(row) # 转换为DataFrame并生成完整时间列 df = pd.DataFrame(data_rows) df["datetime"] = pd.to_datetime(df["date"].astype(str) + " " + df["time"])
2. 数据排序
按完整时间列排序,保证数据时序正确:
df = df.sort_values(by="datetime").reset_index(drop=True)
3. 按日/月分组
按日分组
提取日期部分作为分组键,可按需选择聚合方式:
# 按日计算各指标均值(可替换为sum、max、min等聚合函数) daily_groups = df.groupby(df["datetime"].dt.date).agg({ "temp": "mean", "dew_point": "mean", "pressure": "mean" }) # 若需保留每日原始数据,直接分组即可 daily_raw_data = df.groupby(df["datetime"].dt.date)
按月分组
提取月份周期作为分组键,支持多维度统计:
# 按月计算各指标的均值、极值等 monthly_groups = df.groupby(df["datetime"].dt.to_period("M")).agg({ "temp": ["mean", "max", "min"], "dew_point": "mean", "pressure": "median" })
补充说明
如果你的数据字段与示例不符,需调整row字典中的键和parts索引,确保与实际数据列匹配。
内容的提问来源于stack exchange,提问作者The Emerging Star
相关产品推荐
相关产品推荐

