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

Python读取固定格式多表TXT文件,计算集合均值并绘制等值线图

解决方案:批量处理结构化文本并计算可视化

一、数据读取与结构化拆分(Pandas高效实现)

你的数据是按年份块重复的固定结构,每个块4行:年份站名行、月份行、2行纬度对+数据。直接用read_csv配合分块逻辑更高效,无需逐行读取。

代码实现

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取全部数据,按任意数量空格分割
df_raw = pd.read_csv('your_data.txt', sep=r'\s+', header=None, engine='python')

# 每个数据块占4行,计算总块数
n_blocks = len(df_raw) // 4
all_dfs = []

for i in range(n_blocks):
    # 提取当前块的4行数据
    block = df_raw.iloc[i*4 : (i+1)*4]
    
    # 提取年份和站名(第一行前两个有效元素)
    year = block.iloc[0, 0]
    station = block.iloc[0, 1]
    
    # 提取月份作为后续列名(第二行非空元素)
    months = block.iloc[1].dropna().tolist()
    
    # 提取数据行,拆分纬度对与月份数据
    data_rows = block.iloc[2:4].reset_index(drop=True)
    data_rows.columns = ['lat1', 'lat2'] + months
    
    # 补充年份和站名字段
    data_rows['year'] = year
    data_rows['station'] = station
    
    all_dfs.append(data_rows)

# 合并所有块为一个完整DataFrame
combined_df = pd.concat(all_dfs, ignore_index=True)

为什么比逐行读取高效?

Pandas底层基于C实现,批量处理速度远快于Python原生readline循环,尤其适配数千块的大数据量场景。

二、计算各月份的集合均值

按纬度对分组,计算每个纬度对下各月份的跨年份均值:

# 按lat1、lat2分组,计算月份列的均值
monthly_mean = combined_df.groupby(['lat1', 'lat2'])[months].mean().reset_index()

三、绘制等值线图

假设lat1和lat2为网格坐标,用matplotlib的contourf绘制:

# 转换为网格格式
lat1_unique = monthly_mean['lat1'].unique()
lat2_unique = monthly_mean['lat2'].unique()
X, Y = np.meshgrid(lat1_unique, lat2_unique)

# 以Month1为例绘制等值线图,其他月份只需替换列名
Z = monthly_mean.pivot(index='lat2', columns='lat1', values='Month1').values

plt.figure(figsize=(10, 6))
contour = plt.contourf(X, Y, Z, cmap='viridis')
plt.colorbar(contour, label='Mean Value')
plt.xlabel('Latitude 1')
plt.ylabel('Latitude 2')
plt.title('Monthly Mean Contour Map (Month1)')
plt.show()

四、常见问题排查

  • 列数不一致问题:检查原始文本是否存在缺失行,用df_raw.isna().sum()查看空值分布,按需调整分块逻辑。
  • 年份/站名提取错误:确保第一行仅包含年份和站名两个有效元素,sep=r'\s+'会自动忽略多余空格。
  • 等值线网格异常:若lat1、lat2非连续网格值,可使用scipy.interpolate.griddata进行插值补全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:01:04