gpt4 book ai didi

python - dataframe.mean() 的结果不正确

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:47 25 4
gpt4 key购买 nike

我在 Python 2.7 中工作,我有一个数据框,我想获取名为“c”的列的平均值,但只获取验证另一列中的值是否等于某个值的行。当我执行代码时,答案出人意料,但当我执行计算时,计算中位数,结果是正确的。

为什么均值的输出不正确?

代码如下:

df = pd.DataFrame(
np.array([['A', 1, 2, 3], ['A', 4, 5, np.nan], ['A', 7, 8, 9], ['B', 3, 2, np.nan], ['B', 5, 6, np.nan], ['B',5, 6, np.nan]]),
columns=['a', 'b', 'c', 'd']
)
df
mean1 = df[df.a == 'A'].c.mean()
mean2 = df[df.a == 'B'].c.mean()

median1 = df[df.a == 'A'].c.median()
median2 = df[df.a == 'B'].c.median()

输出:

df
Out[1]:
a b c d
0 A 1 2 3
1 A 4 5 nan
2 A 7 8 9
3 B 3 2 nan
4 B 5 6 nan
5 B 5 6 nan
mean1
Out[2]: 86.0

mean2
Out[3]: 88.66666666666667

median1
Out[4]: 5.0

median2
Out[5]: 6.0

很明显,均值的输出是错误的。

谢谢。

最佳答案

Pandas 在计算平均值时对“总和”进行字符串连接,这从您的示例框架中显而易见。


>>> df[df.a == 'B'].c
3 2
4 6
5 6
Name: c, dtype: object
>>> 266 / 3
88.66666666666667

如果您查看 DataFrame 的 dtype,您会注意到它们都是 object,即使没有单个 Series 包含混合类型。这是由于您的 numpy 数组的声明。数组并不意味着包含异构类型,因此数组默认为 dtype object,然后传递给 DataFrame 构造函数。您可以通过向构造函数传递一个列表来避免这种行为,该列表可以毫无问题地容纳不同的 dtype


df = pd.DataFrame(
[['A', 1, 2, 3], ['A', 4, 5, np.nan], ['A', 7, 8, 9], ['B', 3, 2, np.nan], ['B', 5, 6, np.nan], ['B',5, 6, np.nan]],
columns=['a', 'b', 'c', 'd']
)

df[df.a == 'B'].c.mean()

4.666666666666667

In [17]: df.dtypes
Out[17]:
a object
b int64
c int64
d float64
dtype: object

我仍然无法想象这种行为是有意为之的,所以我认为值得在 pandas 开发页面上打开一个问题报告,但一般来说,你不应该使用 object dtype 系列用于数值计算。

关于python - dataframe.mean() 的结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55955242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com