如何编写for循环从多个不同Excel(csv)文件提取两列生成数组
基础说明
先解答你提到的几个核心疑问:
- Python中和MATLAB向量对应的就是
numpy数组,你用pandas读取得到的df['列名']是Series结构,可以直接当一维数组用,也可以用.to_numpy()方法显式转为标准numpy数组 - 你代码中用到的
data是字典(dict),是Python的键值对存储结构,你这里用文件名作为「键」,对应读取到的DataFrame作为「值」,取值逻辑非常简单:data[键名]即可取出对应的数据,比如要获取BLUE文件的CURR列,写法就是data['BLUE']['CURR'],和你单文件处理时的blue['Curr']逻辑完全一致。
代码实现
第一步:修正你的批量读取代码
你原先的代码缺少字典初始化步骤,会直接报错,修正后完整读取逻辑如下:
import pandas as pd import matplotlib.pyplot as plt import numpy as np # 你的文件名列表 files = ['BLUE' , 'BLUE.REV', 'GREEN', 'GREEN.REV', 'NITRO', 'PURPLE', 'PURPLE.REV', 'RED','RED.REV','SAND','YELLOW.REW','YELLW'] # 初始化空字典,分别存储原始数据、CURR数组、VOLT数组 data = {} x_data = {} y_data = {} for file_name in files: # 注意:这里的列名要和你实际csv文件的列名大小写完全一致,如果你文件里是首字母大写的Volt、Curr,要对应修改 df = pd.read_csv(f"{file_name}.csv", usecols = ['VOLT', 'CURR']) data[file_name] = df # 提取对应数组,和你单文件处理的blueX、blueY逻辑完全一致 x_data[file_name] = df['CURR'] # 要转numpy数组就改成 df['CURR'].to_numpy() y_data[file_name] = df['VOLT']
第二步:数据使用方式
你要获取单个文件的X、Y数组直接取值即可:
# 取BLUE文件的电流、电压数组 blue_x = x_data['BLUE'] blue_y = y_data['BLUE'] # 单文件绘图逻辑和你之前的写法完全一致 plt.plot(blue_x, blue_y, 'r', label='BLUE') plt.title('BLUE IV Curve') plt.legend() plt.xlabel('Current [A]') plt.ylabel('Voltage [V]') plt.show()
如果需要批量绘制所有文件的曲线,可以直接在循环里处理:
plt.figure(figsize=(10,6)) for file_name in files: plt.plot(x_data[file_name], y_data[file_name], label=file_name) plt.xlabel('Current [A]') plt.ylabel('Voltage [V]') plt.title('All Samples IV Curve') plt.legend() plt.show()
注意事项
- 务必确认csv文件的列名大小写,你单文件处理时用的是
Volt、Curr,批量代码里写的是VOLT、CURR,如果和实际文件列名不匹配会报错,需要对应修改 - 如果你不需要保留所有文件的原始DataFrame,只需要电流电压数组,可以删除
data字典的存储逻辑,仅保留x_data和y_data即可,节省内存
内容的提问来源于stack exchange,提问作者Elijah
相关产品推荐
相关产品推荐

