如何与熊猫中的缺失值相加?

问题描述 投票:0回答:1

我想总结一下Pandas Series对象,但是我得到了奇怪的结果,似乎不是文档所说的。

在Pandas 0.19.2中,以下代码:

a = pd.Series({1: 2, 3: 4})
b = pd.Series({3: 5, 4: 6})
print(a + b)

给我,

1    NaN
3    9.0
4    NaN
dtype: float64

然而,documentation说:

求和数据时,NA(缺失)值将被视为零

这似乎将它们视为NaN而不是零。我期待输出:

1    2.0
3    9.0
4    6.0
dtype: float64

在我的情况下,系列来自value_counts()几个列,我想使用sum(),但它给了我NaN所有列中没有值的行,这是错误的。每行应该有一个整数。

对我来说另一个谜是为什么结果有dtype float:

a.dtype, b.dtype, (a+b).dtype

给,

(dtype('int64'), dtype('int64'), dtype('float64'))

这让我很惊讶。

编辑:如果我确保ab具有相同的行,则生成的dtype是int64。所以浮动的变化显然只是为了允许NaN值,这有点令人震惊。

编辑2:修复预期输出中的错误。

python pandas
1个回答
4
投票

文件中的索赔是指减少金额,即:

>>> a + b
1    NaN
3    9.0
4    NaN
dtype: float64
>>> (a + b).sum()
9.0 # nans treated as zero...

没有矢量化的总和。你必须明确地这样做:

>>> (a + b).fillna(0)
1    0.0
3    9.0
4    0.0
dtype: float64

至于float的促销,这是一个常见的pandas陷阱,你可以读到关于here

鉴于您的问题描述,即总结列中的值计数,您可能需要在添加中添加fill_valuepd.Series.add方法允许您执行此操作:

>>> a.add(b, fill_value=0)
1    2.0
3    9.0
4    6.0
dtype: float64

请注意,遗憾的是,由于NaNs,它仍然会进行类型提升。如果是一个问题,您可以轻松解决它:

>>> a.add(b, fill_value=0).astype(np.int)
1    2
3    9
4    6
dtype: int64
© www.soinside.com 2019 - 2024. All rights reserved.