如何从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
相关产品推荐
相关产品推荐

