<p>有几个问题:</p>
<ul>
<li>主要的问题是你的<code>df3</code>的构造有<em>all
数据类型为<code>object</code>的三个系列,而<code>df1</code>和{<cd4>}有
<code>dtype=int</code>前两个系列。在</li>
<li>Pandas数据帧中的数据按序列</em>[列]组织和存储。因此,类型铸造是按系列进行的。因此,在“行和列”之间求和的逻辑必然不同,对于混合类型不一定一致。在</li>
</ul>
<p>要想了解第一个问题发生了什么,您必须明白Pandas不会在每次操作后不断检查选择最合适的数据类型。这将非常昂贵。在</p>
<p>您可以自己检查<code>dtypes</code>:</p>
<pre><code>print({'df1': df1.dtypes, 'df2': df2.dtypes, 'df3': df3.dtypes})
{'df1': 0 int64
1 int64
2 object
dtype: object,
'df2': 0 int64
1 int64
2 object
dtype: object,
'df3': 0 object
1 object
2 object
dtype: object}
</code></pre>
<p>您可以通过检查是否有空值导致转换后的操作,有选择地对<code>df3</code>应用转换:</p>
^{pr2}$
<p>你应该看到一致的治疗。在这一点上,有必要放弃原来的<code>df3</code>:没有任何地方记录过连续序列类型检查可以在每次操作之后应用于<em>或<em>应该</em>。在</p>
<p>要在行或列之间求和时忽略非数值,可以通过<code>pd.to_numeric</code>和<code>errors='coerce'</code>强制转换:</p>
<pre><code>df = pd.DataFrame([[1,2,3],[4,5,'hey'],[7,8,9]])
col_sum = df.apply(pd.to_numeric, errors='coerce').sum()
row_sum = df.apply(pd.to_numeric, errors='coerce').sum(1)
print(col_sum)
0 12.0
1 15.0
2 12.0
dtype: float64
print(row_sum)
0 6.0
1 9.0
2 24.0
dtype: float64
</code></pre>