【发布时间】:2025-12-06 11:50:01
【问题描述】:
我有一个 python 脚本,它成功地将 csv 文件加载到 2d numpy 数组中,然后根据其列和行标题值成功提取所需单元格的值。出于诊断目的,我让脚本在将数据矩阵放入 numpy 数组之前打印它的内容。当底层 csv 文件中的数据包含所有行/列的值时,该脚本将起作用。问题是,当我在 csv 文件上运行脚本时,它会引发错误,该文件在 csv 文件的末尾显然有几个空行/列。我试图通过在 Notepad++ 中打开 csv 文件并删除尽可能多的内容来解决这个问题,因为它可以让我从文件末尾删除。 Notepad++ 让我在最后删除了一行,但并没有表示有任何空列。在深入检查 python 打印输出和我的基础数据结构之间的关系后,我看到 python print 命令说数组末尾有两个空列。无论如何,在编辑完 csv 文件后,我仍然在运行脚本时打印出相同的数据,并且仍然抛出相同的错误,就好像我没有从 csv 文件末尾删除空行一样。我检查了我是否保存了csv文件,打开并关闭了几次csv文件,关闭并重新打开了几次python,但错误仍然存在:
这是我的问题:
如何修改下面的脚本以避免此错误?
这是我上面提到的函数:
def GetHSD_alpha(NumberOfColumnMeans,dfResid):
dirname=os.path.dirname(os.getcwd())
resources=os.path.join(dirname,'resources')
inputfile=os.path.join(resources,'CriticalValuesOfTukeysHSD_a_0_01.csv')
separator=','
ColumnIndex=NumberOfColumnMeans
RowIndex=dfResid
cast = p.cast
data = [[] for dummy in xrange(13)]
for line in open(inputfile, 'r'):
fields = line.strip().split(separator)
for i, number in enumerate(fields):
data[i].append(number)
print 'data HSD alpha is: ',data
time.sleep(2)
CriticalValuesArray=p.array(data)
HSD_alpha_0_01=CriticalValuesArray[ColumnIndex,RowIndex]
return HSD_alpha_0_01
另外,作为参考,这里是打印引发错误的数据的结果的缩写版本。注意最后的空元素,在运行脚本之前我似乎无法从我的 csv 文件中手动删除:
数据 HSD alpha 为:[['', '5', '6', '7'], ['2', '5.7', '5.24', '4.95'], ['3', ' 6.98', '6.33', '5.92'], ['11', '10.48', '9.3', '8.55'], [], []]
也供参考,这里是从另一个 csv 文件打印数据的结果的缩写版本,我将其导入脚本以进行诊断。下面打印输出中对应的数据不会导致脚本抛出错误:
数据 HSD alpha 为:[['', '1', '2', '3'], ['1', '4052', '98.49', '34.12'], ['2', '4999', '99.01', '30.81'], ['3', '5403', '99.17', '29.46']]
再次,当我在 Notepad++ 中打开底层 csv 文件时,似乎没有任何空列或空行,我已经仔细检查了这些数据文件。
最后,我想空行/列的数量可能会有所不同,因此任何解决方案都需要能够处理空行/列的变量数。
提前谢谢你。
【问题讨论】: