如何快速高效将Excel数据导入Python并简化冗余处理代码
优化方案
核心优化点
- 仅读取1次Excel文件,避免重复IO开销
- 用嵌套循环批量读取处理测试数据,无需逐行定义变量
- 将重复的绘图逻辑封装为通用逻辑,大幅减少冗余代码
- 单独配置每组测试的切片长度,适配不同的数据截断需求
优化后代码
import pandas as pd import matplotlib.pyplot as plt # 全局参数配置区,后续修改参数直接改这里即可 F0 = -33.5 FILE_PATH = r'D:\GEO_ENGINEERING\Thesis\Resultaten instrong\datazuiver.xlsx' # 配置4大组测试的切片长度,内层4个值对应每组下4个小测试的结束索引 SLICE_CONFIG = [ [5000, 5000, 5000, 5000], # Proef1 所有测试切到5000行 [2366, 2366, 2366, 2366], # Proef2 所有测试切到2366行 [2366, 2344, 2366, 2366], # Proef3 第2个测试切到2344行,其余切到2366行 [2366, 2366, 2366, 2366] # Proef4 所有测试切到2366行 ] # 配置4大组测试的绘图标题 GROUP_TITLE = [ 'Test 1', 'Test 2', 'Test 3 (no drillgrout)', 'Test 4' ] # 存储所有测试数据,方便后续多组对比绘图 all_test_data = [] # 仅读取一次Excel文件 df = pd.read_excel(FILE_PATH) # 批量处理所有测试数据+绘制单组测试图 for group_idx in range(4): group_num = group_idx + 1 current_group_data = [] for test_idx in range(4): test_num = test_idx + 1 # 读取对应列并做力值校准 time_series = df[f'Time_{group_num}_{test_num}'] force_series = df[f'F_{group_num}_{test_num}'] - F0 # 按配置截断数据 slice_end = SLICE_CONFIG[group_idx][test_idx] time_sliced = time_series[1:slice_end] force_sliced = force_series[1:slice_end] # 存储当前小测试数据 test_info = (time_sliced, force_sliced, f'Proef {group_num} test {test_num}') current_group_data.append(test_info) all_test_data.extend(current_group_data) # 绘制当前大组的测试曲线 plt.figure() for t, f, label in current_group_data: plt.plot(t, f, label=label) plt.xlabel('Time [s]') plt.ylabel('Force [N]') plt.title(GROUP_TITLE[group_idx]) plt.legend() plt.show() # 绘制所有测试对比图(不含Proef3,与原代码逻辑一致) plt.figure() for t, f, label in all_test_data: if 'Proef 3' not in label: plt.plot(t, f, label=label) plt.xlabel('Time [s]') plt.ylabel('Force [N]') plt.title('Test 1, 2, 3 and 4') plt.legend() plt.show() # 绘制Test2和Test4对比图 plt.figure() for t, f, label in all_test_data: if 'Proef 2' in label or 'Proef 4' in label: plt.plot(t, f, label=label) plt.xlabel('Time [s]') plt.ylabel('Force [N]') plt.title('Test 2 and 4') plt.legend() plt.show()
补充说明
所有可调整的参数都统一放在开头的配置区,后续如果需要修改文件路径、切片长度、图表标题,不需要调整核心逻辑,直接修改对应配置项即可。如果后续需要新增其他对比图表,直接从all_test_data中按条件筛选数据绘图即可。
内容的提问来源于stack exchange,提问作者Lodewijk Pleij
相关产品推荐
相关产品推荐

