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

如何将.dat文件中的numpy数组匹配至pandas DataFrame对应行并添加为新列

解决方案

步骤拆解

  1. 初始化新列:先给目标DataFrame添加col3列,默认填充NaN。
  2. 文件名与行名匹配:从.dat文件名中提取和DataFrame行名对应的标识(比如从230109_exp3_foo.dat里提取exp3,对应行名row_exp3)。
  3. 读取文件并赋值:遍历所有.dat文件,读取数据转为numpy数组,找到匹配的行后赋值到col3对应单元格。

完整代码示例

import pandas as pd
import numpy as np
import glob

# 初始化已有DataFrame
data = {'col1': [1, 2, 3, 4],'col2': ["a", "b", "c", "d"]}
df = pd.DataFrame(data, index=['row_exp1','row_exp2','row_exp3','row_exp4'])

# 1. 初始化col3列为NaN
df['col3'] = np.nan

# 2. 获取当前目录下所有.dat文件路径
dat_files = glob.glob('*.dat')

# 3. 遍历文件,匹配行并赋值
for file_path in dat_files:
    # 从文件名提取匹配行名的核心标识
    file_name = file_path.split('/')[-1]  # 处理带路径的文件名
    exp_id = file_name.split('_')[1]  # 适配示例文件名格式:xxx_expX_xxx.dat,可根据实际调整规则
    target_row = f'row_{exp_id}'
    
    # 校验目标行是否存在于DataFrame索引中
    if target_row in df.index:
        # 读取.dat文件转为numpy数组(默认适配空格/制表符分隔的纯数值文件,格式特殊可换np.genfromtxt或自定义读取)
        arr = np.loadtxt(file_path)
        # 精准定位行和列赋值,避免链式赋值警告
        df.loc[target_row, 'col3'] = arr

print(df)

关键细节说明

  • 文件名匹配逻辑:代码中用split('_')[1]提取expX部分,你需要根据实际的文件名格式调整分割规则(比如文件名是exp1_raw.dat,就改成file_name.split('_')[0])。
  • 数据读取适配:如果.dat文件包含表头、非数值注释等内容,可改用np.genfromtxt()并设置skip_header参数,或者写自定义读取函数处理。
  • 赋值方式:必须用.loc[row, col]精准定位单元格,直接索引赋值可能触发pandas的链式赋值警告,导致数据更新异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:21:04