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

如何利用Pandas多级索引提取DataFrame中的lat和long值?

正确读取并提取站点lat/long的优雅方案

首先,你的原始数据结构逻辑是:

  • 第1行:站点名称(作为列标识)
  • 第2-4行:对应站点的lat、long、elv属性参数
  • 第5行及以后:日期与各站点的观测数值

你当前用header=[0,1,2,3]的读取方式会把属性行(lat/long/elv)强行作为列的多级索引,混淆了数据结构层级,反而增加后续操作复杂度。更合理的做法是拆分站点属性与时间序列数据,充分利用Pandas的索引特性管理。

步骤1:读取并拆分数据

import pandas as pd

# 读取全部原始数据,不预设表头
df_raw = pd.read_csv(f_name, header=None)

# 提取站点属性数据(lat/long/elv)
stations = df_raw.iloc[0, 1:].values  # 获取所有站点名称
# 转置属性行,设置列名与站点索引
attrs_df = df_raw.iloc[1:4, 1:].T
attrs_df.columns = ['lat', 'long', 'elv']
attrs_df.index = stations
attrs_df = attrs_df.astype(int)  # 转换为数值类型

# 提取时间序列数据
ts_df = df_raw.iloc[4:, :]
ts_df.columns = ['date'] + list(stations)  # 设置列名
ts_df['date'] = pd.to_datetime(ts_df['date'])
ts_df = ts_df.set_index('date').astype(int)  # 日期设为索引并转换数值类型

步骤2:提取lat和long

此时attrs_df已规整为以站点为索引、属性为列的结构,直接筛选目标列即可:

lat_long_df = attrs_df[['lat', 'long']]

如果坚持使用你当前的多级表头读取方式(不推荐,结构逻辑不合理),可以通过列多级索引提取属性值:

# 基于你已读取的dfr对象
lat_long_df = pd.DataFrame({
    col[0]: {'lat': col[1], 'long': col[2]}
    for col in dfr.columns
}).T.astype(int)

这样可一次性获取所有站点的lat/long数据,无需分两次读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:25:50