使用Numpy loadtxt加载多个CSV为字典报错,该如何解决?
嘿,我来帮你搞定这个问题~
你遇到的ValueError是因为直接把整个types字典传给np.loadtxt()了——loadtxt只认单个文件名(字符串),可没法直接解析字典,所以它误把字典里的键data1当成了要转换的数值,自然就报错啦。
要把多个CSV文件加载成对应的字典,你需要遍历每个文件名,逐个读取数据后存入字典,具体代码可以这么写:
import numpy as np import matplotlib.pyplot as plt # 定义文件名映射 types = {"data1": "data1.csv", "data2": "data2.csv", "data3": "data3.csv"} protocols = {} # 遍历每个文件,读取数据并存入字典 for protname, fname in types.items(): # 读取单个文件,转置后拆分时间列和数值列 col_time, col_window = np.loadtxt(fname, delimiter=',').T # 把当前文件的两列数据存入protocols字典 protocols[protname] = { "col_time": col_time, "col_window": col_window } # 批量绘图 for protname, _ in types.items(): # 从字典中取出对应的数据 col_time = protocols[protname]["col_time"] col_window = protocols[protname]["col_window"] # 计算你需要的rt值(注意diff后长度会减1,时间点也要对应取[1:]) rt = np.exp(np.diff(np.log(col_window))) quotient_times = col_time[1:] # 绘图 plt.figure() # 每个图单独开一个窗口,避免重叠 plt.plot(quotient_times, rt, ".", markersize=4, label=protname) plt.title(f"Time Series: {protname}") plt.xlabel("Timestamp") plt.ylabel("Values") plt.legend() plt.show()
关键点说明:
- 遍历
types.items()时,每次拿到一个protname(比如data1)和对应的文件名fname,单独用loadtxt读取这个文件的数据,这样就不会出现类型错误了。 - 把每个文件的时间列和数值列以字典的形式存入
protocols[protname],后续绘图时可以通过键名快速取出对应的数据。 - 绘图时加了
plt.figure(),这样每个文件的图会单独显示,不会挤在同一个画布上。
内容的提问来源于stack exchange,提问作者user10553396
相关产品推荐
相关产品推荐

