包含int8列的Pandas数据框架,显示不一致的算术(和和积)



我有一个具有int8列的数据帧,以确保较低的内存。

In [1]: df = pd.DataFrame({'a': [100, 50]}, dtype='int8')
df
Out[1]:
a
0   100
1   50
In [2]: df.dtypes
Out[2]: a    int8
dtype: object

sum自动将结果提升到int64,并给出正确的结果。

In [3]: df.sum()
Out[3]:
a    150
dtype: int64

+*操作不这样做。

In [4]: df.loc[0, 'a'] + df.loc[1, 'a']
C:UsersbubaiAppDataLocalTempipykernel_331641219674856.py:1: RuntimeWarning: overflow encountered in byte_scalars
df.loc[0, 'a'] + df.loc[1, 'a']
Out[4]: -106
In [5]: df['a'] * 4
Out[5]: 0   -112
1    -56
Name: a, dtype: int8

所以在一个地方,pandas决定自动上转换结果,而在其他情况下,它不。这是一个不一致的pandas或非标准编码在我的结束?如果我的代码中有这样的算术运算,我怎样才能避免错误的结果呢?

numpy也在这样做:

np.array([100, 50], dtype=np.int8).sum()

输出:150

如果必须有int8类型,则执行显式转换:

df.sum().astype(np.int8)

输出:

a   -106
dtype: int8

最新更新