我想使用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
文件作为字典加载?
答案 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