【发布时间】:2018-03-02 02:54:04
【问题描述】:
我想对 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'))
这让我很惊讶。
编辑:如果我确保 a 和 b 具有相同的行,则生成的 dtype 为 int64。所以改成float显然只是为了允许NaN值,这有点令人震惊。
编辑 2:修复预期输出中的错误。
【问题讨论】:
-
问题不是缺失值,而是索引不匹配。
pandas数据结构的重点是自动索引对齐。 -
是的,我明白这一点,但我想将缺失的索引视为缺失值,文档说它们应该被视为零。这是 Pandas 中的错误还是文档中的错误?
-
“当对数据求和时,NA(缺失)值将被视为零”正在谈论
sum方法。 -
您还可以查看如何估算缺失数据。
-
> '"对数据求和时,NA(缺失)值将被视为零"是在谈论求和方法。'所以这不适用于
+运营商?所以我不能将它与 Pythonsum()方法一起使用? (ps.,这是一个答案。为什么在我提出的每一个问题上,人们都坚持将答案放在 cmets 中?)