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

如何快速高效将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:15:06