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

如何从pandas DataFrame列表提取4维数据并转换为Flux(x,y,t,E)结构

高效处理方案:用xarray多维数组工具实现

xarray是专门针对带标签多维数组设计的Python数据处理库,完美匹配你的四维通量数据结构需求,全程不需要循环22500个空间坐标,总处理耗时仅数秒。


处理流程

1. 依赖准备

只需要安装三个常用数据处理库:

  • pandas:读取csv文件
  • xarray:构建和操作四维数组
  • numpy:底层数值计算支持

2. 批量读取文件并提取参数

遍历所有csv文件,用正则从文件名提取时间t和能量E参数,示例正则匹配规则适配你给出的文件名格式:r'time([+-]?[\d.eE+-]+)-energy([+-]?[\d.eE+-]+)-position\.csv',提取后转为float类型即可。

每个csv读取后转为xarray的DataArray结构,将x、y设为空间坐标,同时给该数组加上对应t、E的维度标签。

3. 合并为四维通量数组

将所有单文件生成的DataArray沿着t和E两个维度拼接,直接得到完整的Flux(x,y,t,E)四维数据集,整个合并操作为向量化实现,效率远高于手动循环拼接。

4. 按需生成目标DataFrame

需要获取任意(x,y)对应的结果时,直接用xarray的坐标选择方法筛选对应位置,调用to_pandas()方法即可自动生成行索引为t、列名为E的DataFrame,完全符合输出要求。


示例参考代码

import xarray as xr
import pandas as pd
import re
from pathlib import Path

# 替换为你的csv文件所在目录
csv_root = Path("./flux_csvs")
data_list = []
# 文件名匹配规则
file_pattern = re.compile(r"time([+-]?[\d.eE+-]+)-energy([+-]?[\d.eE+-]+)-position\.csv")

for csv_file in csv_root.glob("*.csv"):
    # 提取时间和能量参数
    match_res = file_pattern.match(csv_file.name)
    t = float(match_res.group(1))
    E = float(match_res.group(2))
    # 读取150×150网格数据,默认csv第一列为x坐标、第一行为y坐标
    grid_df = pd.read_csv(csv_file, index_col=0)
    grid_df.columns = grid_df.columns.astype(float)
    # 转xarray结构并添加t、E维度
    da = xr.DataArray(
        grid_df.values,
        coords={
            "x": grid_df.index,
            "y": grid_df.columns.astype(float),
            "t": [t],
            "E": [E]
        },
        dims=["x", "y"]
    ).expand_dims(["t", "E"])
    data_list.append(da)

# 拼接得到完整四维数据集
flux_ds = xr.combine_by_coords(data_list)

# 示例:提取x=0.5、y=0.5对应的目标DataFrame
target_df = flux_ds.sel(x=0.5, y=0.5).to_pandas()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:12:00