<p>如果要比较2数据帧并检查任何更改/差异,为什么不使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.compare.html" rel="nofollow noreferrer">^{<cd1>}</a>函数</p>
<p>以下是基于示例数据的示例输出:</p>
<pre><code>df.compare(df1)
</code></pre>
<p><strong>输出:</strong></p>
<pre><code> episodes
self other
0 12.0 42.0
1 32.0 24.0
3 32.0 29.0
</code></pre>
<p>默认情况下,它仅突出显示差异。这里,它显示只有列<code>episodes</code>有差异。<br/>
<code>self</code>对应于<code>df</code>的值,<code>other</code>对应于<code>df1</code>的值</p>
<p>左侧的索引,即<code>0</code>、<code>1</code>和<code>3</code>显示了不同的行索引</p>
<p>如果要显示整个原始形状,还可以使用<code>keep_shape=</code>参数,如下所示:</p>
<pre><code>df.compare(df1, keep_shape=True)
</code></pre>
<p><strong>输出:</strong></p>
<pre><code> name episodes gender
self other self other self other
0 NaN NaN 12.0 42.0 NaN NaN
1 NaN NaN 32.0 24.0 NaN NaN
2 NaN NaN NaN NaN NaN NaN
3 NaN NaN 32.0 29.0 NaN NaN
4 NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN
</code></pre>
<p>仅显示不同的值<code>NaN</code>值是没有差异的值</p>
<p>当然,如果愿意,也可以选择显示所有值,包括相等值,如下所示:</p>
<pre><code>df.compare(df1, keep_shape=True, keep_equal=True)
</code></pre>
<p><strong>输出</strong></p>
<pre><code> name episodes gender
self other self other self other
0 Sheldon Sheldon 12 42 male male
1 Penny Penny 32 24 female female
2 Amy Amy 31 31 female female
3 Bernadette Bernadette 32 29 female female
4 Raj Raj 37 37 male male
5 Howard Howard 40 40 male male
</code></pre>
<p>此选项允许您并排比较以检查差异。不管怎么说,要找出差异就不那么容易了</p>
<p>我建议您首先使用默认选项仅显示差异(可能是写下具有差异的行的索引),并且可以选择仅在需要详细检查另一侧值(相等)时使用其他2个选项</p>
<p>要在<code>while</code>循环下使用,可以使用:</p>
<pre><code>while True:
df1 = pd.DataFrame(new, columns = ['name','episodes', 'gender'])
out = df.compare(df1)
print(out)
df = df1
</code></pre>
<h2>编辑</h2>
<p>如果要查看<code>name</code>,同时保持只查看其他列的差异,可以使用<code>append=True</code>设置索引,如下所示:</p>
<pre><code>df.set_index('name', append=True).compare(df1.set_index('name', append=True))
</code></pre>
<p><strong>输出</strong></p>
<pre><code> episodes
self other
name
0 Sheldon 12.0 42.0
1 Penny 32.0 24.0
3 Bernadette 32.0 29.0
</code></pre>
<p>通过这种方式,您可以看到<code>name</code>和具有差异的行索引</p>