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

如何用循环结合df.query批量处理经纬度点日均值并导出CSV

批量处理经纬度点的O3数据日均值并导出CSV

问题背景

我有一个维度为(17,11)的矩阵数据,每个经纬度点(longitude为X轴,latitude为Y轴)每日包含9条O3数据。需要针对每一组经纬度对应的数据筛选存入DataFrame,按日重采样计算均值后导出为CSV文件。

已掌握单条处理的代码:

dl_1=d.query('longitude==-55 and latitude==-18.5')
daily_resampled_data_1 = dl_1.resample('D').mean()
daily_resampled_data_1.to_csv('CAMS_ponto1_O3.csv')
daily_resampled_data_1

尝试用循环简化但写法存在问题,原始循环雏形:

latitudes = [-18.5, -19.25, -20.0, -20.75, -21.5, -22.25, -23.0, -23.75, -24.5, -25.25,-26.0]
longitudes = [-55.0, -54.25, -53.5, -52.75, -52.0, -51.25, -50.5, -49.75, -49.0, -48.25, 47.5, -46.75, -46.0, -45.25, -44.5, -43.75, -43.0]

for x in latitude:
       for y in longitude:
           dl_[x][y]=d.query('longitude==[x] and latitude==[y]')
           daily_resampled_data_[x][y] = dl_[x][y].resample('D').mean()
           daily_resampled_data_[x][y].to_csv('CAMS_ponto[x][y]_O3.csv')

需要确认该实现是否可行,并得到正确的循环写法。


原始代码的问题

  1. 变量名错误:latitude/longitude应为定义好的latitudes/longitudes
  2. df.query语法错误:不能用[x]引用变量,需用字符串拼接或f-string传递变量值
  3. 无需嵌套字典存储临时DataFrame,直接处理导出更节省内存
  4. 文件名拼接错误:字符串内无法直接解析[x][y],需用格式化语法生成文件名

修正后的可行代码

import pandas as pd

# 定义经纬度列表
latitudes = [-18.5, -19.25, -20.0, -20.75, -21.5, -22.25, -23.0, -23.75, -24.5, -25.25, -26.0]
longitudes = [-55.0, -54.25, -53.5, -52.75, -52.0, -51.25, -50.5, -49.75, -49.0, -48.25, 47.5, -46.75, -46.0, -45.25, -44.5, -43.75, -43.0]

# 确保数据框索引为时间类型(重采样必备)
# 若有单独时间列,先执行以下两行:
# d['timestamp'] = pd.to_datetime(d['timestamp'])
# d.set_index('timestamp', inplace=True)

# 遍历所有经纬度组合
for lat in latitudes:
    for lon in longitudes:
        # 方式1:使用df.query筛选数据
        dl = d.query(f'longitude == {lon} and latitude == {lat}')
        # 方式2:布尔索引(处理浮点数精度问题更可靠)
        # dl = d[(d['longitude'] == lon) & (d['latitude'] == lat)]
        
        # 跳过空数据,避免报错
        if dl.empty:
            print(f"No data for lon={lon}, lat={lat}, skipping...")
            continue
        
        # 按日重采样计算均值
        daily_resampled = dl.resample('D').mean()
        
        # 生成规范文件名,替换负号为下划线
        filename = f'CAMS_ponto_lat{lat}_lon{lon}_O3.csv'.replace('-', '_')
        
        # 导出CSV
        daily_resampled.to_csv(filename)
        print(f"Saved: {filename}")

关键注意事项

  • 时间索引要求:resample('D')必须依赖时间类型索引,若数据中是单独的时间列,需先转为datetime并设置为索引。
  • 空数据处理:加入if dl.empty判断,避免无数据时后续操作抛出异常。
  • 浮点数精度:若经纬度为浮点型,存在精度误差时,可改用np.isclose替代直接等于判断,例如:dl = d[np.isclose(d['longitude'], lon) & np.isclose(d['latitude'], lat)]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:15:04