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

