Python dataframe.mean()的结果不正确

Python dataframe.mean()的结果不正确,python,dataframe,mean,Python,Dataframe,Mean,我在Python2.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], 列=['a','b','c','d']

我在Python2.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],
列=['a','b','c','d']
)
df
平均值1=df[df.a=='a'].c.平均值()
平均值2=df[df.a=='B'].c.平均值()
median1=df[df.a=='a'].c.中值()
median2=df[df.a=='B'].c.中值()
输出:

df
出[1]:
a、b、c、d
0 A 12 3
1 A 4 5南
2 A 7 8 9
3B32NAN
4 B 5 6南
5B56Nan
mean1
Out[2]:86.0
意思2
Out[3]:88.666667
媒体1
Out[4]:5.0
媒体2
Out[5]:6.0
很明显,平均值的输出是不正确的


谢谢。

在计算平均值时,Pandas正在对“和”进行字符串连接,从示例帧中可以清楚地看到这一点


如果查看数据帧的
dtype
,您会注意到它们都是
对象
,即使没有单个
系列
包含混合类型。这是因为声明了
numpy
数组。数组并不意味着包含异构类型,因此数组默认为dtype
object
,然后将其传递给数据帧构造函数。您可以通过向构造函数传递一个列表来避免这种行为,该列表可以保存不同的
dtype
,而不会出现任何问题





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

您的列是dtype
object
,它是先进行字符串连接,然后进行除法,这一定是无意的…@yatu[2,6,6]的中位数是6,这是正确的,但[2,6,6]的平均值不是86.6。请将你文章的最后一行“很明显,媒体的输出是不正确的”从媒体改为平均值。
>>> df[df.a == 'B'].c
3    2
4    6
5    6
Name: c, dtype: object
>>> 266 / 3
88.66666666666667
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