Pandas DataFrame列求和及10年小时气象数据按月均值计算求助
Pandas 常见数据处理问题解答
1. 如何对DataFrame中的某一列值求和?
直接使用列的sum()方法即可,示例如下:
import pandas as pd # 假设你的DataFrame为df,目标列是'FH'(风速) column_sum = df['FH'].sum() print(f"列'FH'的总和为: {column_sum}")
如果列中存在缺失值,可通过skipna参数控制是否跳过(默认skipna=True,自动跳过缺失值):
column_sum_with_na = df['FH'].sum(skipna=False)
2. 逐小时气象数据按月计算平均值
针对10年的逐小时大型数据集,可通过时间序列重采样实现按月求平均,步骤如下:
步骤1:解析日期时间
先将YYYYMMDD(日期)和HH(小时)合并为标准的datetime类型,方便后续时间分组:
import pandas as pd # 读取数据(示例数据用空格分隔,跳过注释行) df = pd.read_csv('weather_data.csv', sep='\s+', comment='#') # 合并日期与小时为datetime列:将YYYYMMDD转成字符串,小时补零后拼接,再解析为datetime df['datetime'] = pd.to_datetime( df['YYYYMMDD'].astype(str) + df['HH'].astype(str).str.zfill(2), format='%Y%m%d%H' ) # 将datetime设为索引(可选,但能简化时间操作) df.set_index('datetime', inplace=True)
步骤2:按月重采样计算平均值
使用resample('M')按月份分组,对风速(FH)、气温(T)、气压(P)列求均值:
# 按月计算指定列的平均值 monthly_averages = df.resample('M')[['FH', 'T', 'P']].mean() # 查看结果 print(monthly_averages)
针对超大型数据集的优化
如果数据量过大无法一次性加载到内存,可采用分块读取的方式处理:
chunk_size = 10000 # 分块大小,根据内存情况调整 processed_chunks = [] # 分块读取并处理 for chunk in pd.read_csv('large_weather_data.csv', sep='\s+', comment='#', chunksize=chunk_size): chunk['datetime'] = pd.to_datetime( chunk['YYYYMMDD'].astype(str) + chunk['HH'].astype(str).str.zfill(2), format='%Y%m%d%H' ) processed_chunks.append(chunk.set_index('datetime')) # 合并所有分块 df = pd.concat(processed_chunks) # 计算月度平均值 monthly_averages = df.resample('M')[['FH', 'T', 'P']].mean()
内容的提问来源于stack exchange,提问作者EnergyHydrogenCoder
相关产品推荐
相关产品推荐

