numpy:将多个CSV文件作为字典加载

时间:2019-02-19 13:23:59

标签: python python-3.x csv numpy dictionary

我想使用numpy loadtxt method来读取实验的.csv文件。我具有以下三种格式的具有不同特征的不同时间序列数据,其中第一列是时间戳记,第二列是值。

0.086206438,10
0.086425551,12
0.089227066,20
0.089262508,24
0.089744425,30
0.090036815,40
0.090054172,28
0.090377569,28
0.090514071,28
0.090762872,28
0.090912691,27

为了重现性,我共享了here所使用的三个时间序列数据。

如果我像下面这样

import numpy as np

fname="data1.csv"

col_time,col_window = np.loadtxt(fname,delimiter=',').T

它按预期工作正常。但是,我不想只读取一个文件,而是要像以下那样将字典传递给col_time,col_window = np.loadtxt(types,delimiter=',').T

protocols = {} types = {"data1": "data1.csv", "data2": "data2.csv", "data3": "data3.csv"}

这样,我就可以读取多个csv文件,并使用一个for loop将所有结果绘制在一个文件中,如下所示。

for protname, fname in types.items():
    col_time, col_window = protocols[protname]["col_time"], protocols[protname]["col_window"]
    rt = np.exp(np.diff(np.log(col_window)))
    plt.plot(quotient_times, quotient, ".", markersize=4, label=protname)
    plt.title(protname)
    plt.xlabel("t")
    plt.ylabel("values")
    plt.legend()
    plt.show()

但这给我一个错误ValueError: could not convert string to float: b'data1'。如何将多个csv文件作为字典加载?

2 个答案:

答案 0 :(得分:1)

假设您想构建一个可在您的代码中使用的protocols字典,则可以通过一个简单的循环轻松地构建它:

types = {"data1": "data1.csv", "data2": "data2.csv", "data3": "data3.csv"}
protocols = {}

for name, file in types.items():
    col_time, col_window = np.loadtxt(file, delimiter=',').T
    protocols[name] = {'col_time': col_time, 'col_window': col_window}

然后您可以成功绘制3个图形:

for protname, fname in types.items():
    col_time, col_window = protocols[protname]["col_time"], protocols[protname]["col_window"]
    rt = np.exp(np.diff(np.log(col_window)))
    plt.plot(col_time, col_window, ".", markersize=4, label=protname)
    plt.title(protname)
    plt.xlabel("t")
    plt.ylabel("values")
    plt.legend()
    plt.show()

答案 1 :(得分:0)

pandas和numpy不支持从多个CSV文件加载数据。您可以使用熊猫concat的{​​{1}}功能并加载所有文件。下面的示例演示了如何使用熊猫。将DataFrame替换为文件对象。

StringIO

有关更多信息,请访问:pandas append vs concat