<p>根据您的第二张图表,您的计算机可能会在短时间内分配额外的4.368GB内存,这大约相当于3.2GB数据集的大小(假设1GB的开销,这可能是一个扩展)。在</p>
<p>我试图找到一个可能发生这种情况的地方,但没有取得成功。不过,如果你有动力的话,也许你能找到它。我走的路是:</p>
<p><a href="https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py#L908" rel="nofollow">This line</a>显示:</p>
<pre><code>def read(self, nrows=None):
if nrows is not None:
if self.options.get('skip_footer'):
raise ValueError('skip_footer not supported for iteration')
ret = self._engine.read(nrows)
</code></pre>
<p>这里,<code>_engine</code>引用<a href="https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py#L1674" rel="nofollow">^{<cd2>}</a>。在</p>
<p>反过来,调用<a href="https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py#L2359" rel="nofollow">^{<cd3>}</a>。在</p>
<p>调用数据<a href="https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py#L2379" rel="nofollow">^{<cd4>}</a>。在</p>
<p>它似乎以字符串的形式从一些相对标准的东西中读入(参见<a href="https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py#L1741" rel="nofollow">here</a>),比如<a href="https://docs.python.org/2/library/io.html#io.TextIOWrapper" rel="nofollow">TextIOWrapper</a>。在</p>
<p>所以东西被当作标准文本读入并转换,这就解释了慢斜坡的原因。在</p>
<p>扣球呢?我想这可以用<a href="https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py#L908-L916" rel="nofollow">these lines</a>来解释:</p>
^{pr2}$
<p><code>ret</code>成为数据帧的所有组件。在</p>
<p><code>self._create_index()</code>将<code>ret</code>分成以下几个部分:</p>
<pre><code>def _create_index(self, ret):
index, columns, col_dict = ret
return index, columns, col_dict
</code></pre>
<p>到目前为止,一切都可以通过引用完成,对<code>DataFrame()</code>的调用延续了这一趋势(请参见<a href="https://github.com/pydata/pandas/blob/master/pandas/core/frame.py#L251" rel="nofollow">here</a>)。在</p>
<p>所以,如果我的理论是正确的,<code>DataFrame()</code>要么在某处复制数据,要么{<cd10>}沿着我确定的路径在某处复制数据。在</p>