You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:53:31