【问题标题】:Read multiple csv files (size mxm) and load as an n dimensional array (size nxmxm) (not concatenate)读取多个 csv 文件(大小 mxm)并加载为 n 维数组(大小 nxmxm)(不连接)
【发布时间】:2019-12-08 13:05:24
【问题描述】:

我正在开发一个需要将大量 csv 文件(数千个)加载到数组中的程序。

csv 文件的尺寸为 45x100,我想创建一个尺寸为 nx45x100 的 3-d 数组。现在,我使用 pd.read_csv() 加载每个 csv 文件,然后使用 np.array() 将每个文件转换为数组。然后我使用 np.array(data_0, data_1,...,data_n) 创建一个 3d 数组,我得到一个具有所需尺寸的 3-d 数组。

虽然有效,但非常乏味。有没有什么方法可以在不单独读取和处理每个 csv 文件的情况下做到这一点?

   #this is my current code
   import numpy as np
   import pandas as pd
   from pandas import Series, DataFrame

   mBGS5L = pd.read_csv("strain5.csv") #45x100 
   mBGS8L = pd.read_csv("strain8.csv")
   mBGS10L = pd.read_csv("strain10.csv")

   mBGS5L_ = np.array(mBGS5L)
   mBGS8L_ = np.array(mBGS8L)
   mBGS10L_ = np.array(mBGS10L)

   mBGS = np.array([mBGS5L_,mBGS8L_,mBGS10L_])
   #to which mBGS.shape returns a 3x45x100 array'''

注意:我已经检查了有关将多个 csv 文件加载到 1 个数据帧中的其他 stackoverflow 链接,我从中了解了 glob 以获取我需要的所有 csv 文件的列表。不过我的问题是,使用 glob 并连接 csv 文件会返回一个列表而不是 3d 数组——我无法将其转换为 numpy 数组,因为它会返回错误

   from glob import glob
   strain = glob("strain*.csv")
   df= [pd.read_csv(f) for f in strain]
   df_ = np.asarray(df)
   #this returns an error: cannot copy sequence with size 45 to array axis with dimension 30

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 您确定所有文件都生成相同的形状数组吗?
  • 是的,它们都是 45x100 数组

标签: python pandas csv numpy


【解决方案1】:

首先您需要将 dataframes 转换为 mxm 数组。参考下面的代码

from glob import glob
import numpy as np
strain = glob("strain*.csv")
df = [pd.read_csv(f).values for f in strain]
df_ = np.asarray(df)

【讨论】:

  • 如果我有多组数据组,即 strain1 = glob("strain1*.csv"), strain2 = glob("strain*.csv"),是否可以使用此代码?我想创建一个 3d 数组,其中包含来自这两个数据集的所有 csv 文件。谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 2019-08-04
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多