首页 > 解决方案 > 如何从多个文件中读取同一列并将其收集到一个数组中

问题描述

我有 9 个 csv 文件,每个文件都包含相同数量的列 (61) 以及相同的列标题。这些文件基本上是相互跟进的。每一列都属于一个信号读数,该读数已经记录了很长时间,因此分为多个文件。我需要为每一列绘制收集的数据。为此,我想我会一次从所有文件中读取一列,并将数据存储到一个数组中,然后根据时间绘制图表。由于数据负载太大,系统一个月每 5 秒读取一次,我想每 30 分钟读取一次数据,这等于每 362 行读取 1 行。

我已经尝试在不跳过行的情况下绘制所有内容,并且由于数据加载,它需要很长时间。

file_list = glob.glob('*.csv') cols = [0,1] # 在此处添加更多列

df = pd.DataFrame()

对于文件列表中的 f:

df = df.append(
    pd.read_csv(f, delimiter='\s+', header=None, usecols=cols),
    ignore_index=True,    
)

arr = df.values

这是我试图从多个文件中仅读取特定列但我收到此消息:“Usecols 与列不匹配,列预期但未找到:[1]”

标签: arrayspandasmultiple-columnsread.csv

解决方案


下面的命令将执行并行读取,然后进行连接。假设file_list包含可以使用read_file以下函数读取的文件列表

import multiprocessing as mp


def read_file(file):
    return pd.read_csv(file)


pool = mp.Pool(mp.cpu_count())  # one worker per CPU. You can try other things
df = pd.concat(pool.map(read_file, file_list)
pool.terminate()
pool.join()

推荐阅读