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

如何用Python快速读取多份同格式行数不同的文件数据至单个NumPy数组?

高效读取多文件并按列存储NumPy数组的方法

你现在的思路其实是对的——循环读取每个文件再拼接,这是处理这类场景的常规操作,不过可以优化得更简洁高效一些。我给你整理两种常用的实现方式,根据你的需求选就行:

纯NumPy实现(内存足够时首选)

这种方法直接用NumPy的内置函数,速度快,代码也简洁:

import numpy as np

# 替换成你的文件名列表
filenames = ["foo.txt", "bar.txt"]

# 批量读取所有文件的数据
all_datasets = [np.loadtxt(fname) for fname in filenames]

# 垂直拼接所有数据集(因为列数一致、行数不同,vstack完美适配)
combined_data = np.vstack(all_datasets)

# 拆分出每一列的NumPy数组
col1, col2, col3 = combined_data.T  # 转置后直接解包,或者用combined_data[:,0]单独取列

关键细节说明:

  • np.vstack()是专门用来垂直拼接同列数数组的函数,比手动循环拼接效率高得多;
  • 如果你的文件分隔符不是空格,记得给loadtxt加delimiter参数(比如逗号分隔就用delimiter=",");
  • 如果担心文件列数不一致,可以在读取时加个校验:
    expected_cols = 3
    all_datasets = []
    for fname in filenames:
        data = np.loadtxt(fname)
        if data.ndim == 1:  # 处理只有一行数据的情况,此时数组是一维的
            data = data.reshape(1, expected_cols)
        if data.shape[1] != expected_cols:
            raise ValueError(f"文件 {fname} 列数不对,预期{expected_cols}列,实际{data.shape[1]}列")
        all_datasets.append(data)
    

用Pandas辅助处理(适合复杂格式/含缺失值场景)

如果你的文件有缺失值、或者格式更复杂(比如带表头),用Pandas会更灵活:

import pandas as pd
import numpy as np

filenames = ["foo.txt", "bar.txt"]

# 批量读取为DataFrame
df_list = [pd.read_csv(fname, sep=" ", header=None) for fname in filenames]

# 拼接所有DataFrame
combined_df = pd.concat(df_list, ignore_index=True)

# 转成NumPy数组的列
col1 = combined_df[0].to_numpy()
col2 = combined_df[1].to_numpy()
col3 = combined_df[2].to_numpy()

Pandas会自动处理一些格式问题,比如某行数据有缺失时会用NaN填充,后续你可以用fillna()来处理这些缺失值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:43:09