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

Python脚本二次及后续循环返回空数组问题排查求助

问题分析与解决方案

核心问题

  1. 切片范围错误:self.no_samples固定为202422,处理第2、3个测量点时,找到的行号l1(202436、404843)已大于该值,导致self.alldata.iloc[l1:self.no_samples, 0]返回空数据集,最终生成空数组。
  2. 返回值错误:extract_sensordata函数返回print(self.extract_data),而print的返回值是None,导致self.EO[n].extracted_data实际被赋值为None,而非提取到的数组。
  3. 硬编码样本数:样本数直接写死为202422,未根据测量点位置动态计算提取范围。

修复步骤

  • 调整切片逻辑:从找到的行号l1开始,提取固定数量的样本(而非到固定位置)。
  • 修正返回值:直接返回处理后的数组,替代返回print结果。
  • 优化样本数管理:将样本数设为类属性,方便后续修改。

修正后的代码

import pandas as pd
import numpy as np

class unv_processing():

    class vrbls:
        def __init__(self, extracted_data=None, timeH=None):
            self.extracted_data = extracted_data
            self.timeH = timeH

    def __init__(self):
        self.EO = {1: self.vrbls(), 2: self.vrbls(), 3: self.vrbls()}
        self.sample_count = 202422  # 样本数设为类属性,便于调整

    def read_testdata(self, testdata):
        self.alldata = pd.read_csv(testdata, sep='delimiter', header=None)
        return self.alldata

    def extract_sensordata_Ntimes(self, measure_pnt):
        def reader(n):
            self.EO[n].extracted_data = self.extract_sensordata(measure_pnt[n])
        for i in (1, 2, 3):
            reader(i)
        return

    def extract_sensordata(self, measure_pnt):
        l1 = None
        for c in range(len(self.alldata.iloc[:, 0])):
            if self.alldata.iloc[c, 0] == measure_pnt:
                l1 = c + 11
                print(f'unv line number {l1}')
                break
        if l1:
            # 从l1开始提取指定数量样本,添加边界检查避免越界
            end_idx = l1 + self.sample_count
            end_idx = min(end_idx, len(self.alldata))
            extract_data = pd.DataFrame(self.alldata.iloc[l1:end_idx, 0]).to_numpy()
            extract_data = np.array([i[0].split() for i in extract_data]).astype('float64').ravel()
            print(extract_data)
            return extract_data
        else:
            print("未找到匹配的测量点")
            return None

def main(arg_mod):
    s = unv_processing()
    s.read_testdata(arg_mod.testdata)
    s.extract_sensordata_Ntimes(arg_mod.measure_pnt)

内容的提问来源于stack exchange,提问作者shoggananna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:20:53