<p>经过更多的搜索,尝试和战斗,我设法找到了一种方法来做到这一点。</p>
<p>首先,为了方便起见,我分别创建一个转换公式,并在<code>genfromtxt</code>命令中调用它:</p>
<pre><code>convert = lambda x: float(x.strip('"') or -999)
</code></pre>
<p>这个<a href="http://www.secnetix.de/olli/Python/lambda_functions.hawk" rel="nofollow">lambda function</a>所做的是从每个条目中去掉双引号字符(或者如果它是空的或者<code>nan</code>设置为<code>-999</code>),然后将条目转换为浮点。然后进入<code>genfromtext</code>命令,如下所示:</p>
<pre><code>dataArray = np.genfromtxt('Input Data/'+fileName,delimiter=',',skip_header=2,converters={0: convert,1: convert,2: convert,3: convert,4: convert},dtype=None)
</code></pre>
<p>这适用于这个特殊情况,但它有两个问题:<strong>(1)必须分别为每一列指定转换器--我找不到指定“应用于所有列”的方法。</strong>更好的方法是使用遍历所有列并将转换应用于所有列的迭代函数…然后该函数将指定哪些列应用于。如果可能的话我不知道怎么做。问题<strong>(2)是您无法结合转换器读取标题。</strong>例如:</p>
<pre><code>dataArray = np.genfromtxt('Input Data/'+fileName,delimiter=',',skip_header=1,names=True,converters={0: convert,1: convert,2: convert,3: convert,4: convert},dtype=None)
</code></pre>
<p>如果数据上方的行有列标题,但当从列中读入名称时,它不再是数组,而是元组列表,则应该可以工作。这可能是因为数据中的列名周围也有引号,转换器不会应用到它们。这应该无关紧要,因为它们不是数组的一部分,数组中的所有数字,但这似乎就是<code>genfromtxt</code>的工作原理。这就是说,它似乎不是执行这项任务的一种非常好/可靠的方法,当然,它的文档记录也很差,因此不清楚它能做什么或不能做什么,以及如何获得完成这些任务的方法。</p>
<p>我对未来面临这个问题的人的建议是寻找一种不同的方法来执行这个功能。很多人建议在其他问题中使用<code>pandas</code>来完成类似的任务,但我不知道这样做是否更好。目前,这对我来说是可行的,但在不久的将来,它将不得不被一个更健壮的csv阅读器所取代,以产生一个文件格式,numpy可以很容易地构建成一个数组。</p>