arrays - 如何从多个文件中读取同一列并将其收集到一个数组中
问题描述
我有 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]”
解决方案
下面的命令将执行并行读取,然后进行连接。假设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()
推荐阅读
- graph-databases - 在遍历中排除顶点及其子节点 [Gremlin API]
- sql - 在不相等的列上连接两个表
- javascript - 如何在本地之外打印本地更改的全局变量?
- c++ - 如何对 CUDA 程序进行基准测试?
- mysql - 如何将mssql用户定义的表类型转换为mysql UDT
- html - 如何将 div 居中对齐在另一个 div 下方,同时保持它们独立的 div
- sql - SQL Server 使用具有两个匹配表的大小写
- swift - 出现错误:-无法将类型“NotificationItem”的值转换为关闭结果类型“RTVNotification”
- html - 如何在表单中修复范围
- gojs - GoJS 事件 mouseDrop 未触发(使用 SelectedMoved)