Pandas Bug ?:在某些情况下,分组的int64列的平均值保持为int64

时间:2015-09-27 14:51:37

标签: python csv pandas

我发现一个非常奇怪的(恕我直言)行为,一些数据从CSV文件加载到pandas中。为了保护无辜者,让我们声明DataFrame位于变量homes中,其中包括以下列:

In [143]: homes[['zipcode', 'sqft', 'price']].dtypes
Out[143]:
zipcode     int64
sqft        int64
price       int64
dtype: object

为了获得每个邮政编码的平均价格,我尝试了:

In [146]: homes.groupby('zipcode')[['price']].mean().head(n=5)
Out[146]:
           price
zipcode
28001     280804
28002     234284
28003     294111
28004    1355927
28005     810164

奇怪的是,价格均值是一个int64,如下所示:

In [147]: homes.groupby('zipcode')[['price']].mean().dtypes
Out[147]:
price    int64
dtype: object

我无法想象为什么某些总体的平均值不会被提升为浮动的任何技术原因。更重要的是,只需添加另一列,就可以使价格成为float64 正如我所期待的那样:

In [148]: homes.groupby('zipcode')[['price', 'sqft']].mean().dtypes
Out[148]:
price       float64
sqft        float64
dtype: object

                  price          sqft
zipcode
28001     280804.690608  14937.450276
28002     234284.035176   7517.633166
28003     294111.278571  10603.096429
28004    1355927.097792  13104.220820
28005     810164.880952  19928.785714

为了确保我没有遗漏一些非常明显的东西,我创建了另一个非常简单的DataFramedf)但是,有了这个,这个行为没有出现:

In [161]: df[['J','K']].dtypes
Out[161]:
J    int64
K    int64
dtype: object

In [164]: df[['J','K']].head(n=10)
Out[164]:
   J   K
0  0  -9
1  0 -14
2  0   8
3  0 -11
4  0  -7
5 -1   7
6  0   2
7  0   0
8  0   5
9  0   3

In [165]: df.groupby('J')[['K']].mean()
Out[165]:
           K
J
-2 -2.333333
-1  0.466667
 0 -1.030303
 1 -1.750000
 2 -3.000000

请注意,对于单个列,K:int64,按J分组,另一个是int64,平均值直接是浮点数。已读取homes DataFrame 提供的CSV文件,已在pandas中创建df个文件,写入CSV然后回读。

最后但并非最不重要的是,我使用的是pandas 0.16.2。

1 个答案:

答案 0 :(得分:2)

正如你们中的一些人在评论中所说,这是熊猫中的一个错误。我刚刚报告了它here

截至目前,它已被大熊猫队接受。

谢谢