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

Python Pandas Bug?:按int64分组的列的平均值在某些情况下保持为int64,python,csv,pandas,Python,Csv,Pandas,我发现一个非常奇怪的行为(IMHO),一些数据从CSV文件加载到熊猫中。为了保护无辜者,让我们声明DataFrame位于变量homes中,并且除其他外,具有以下列: In [143]: homes[['zipcode', 'sqft', 'price']].dtypes Out[143]: zipcode int64 sqft int64 price int64 dtype: object 为了得到每个zipcode的平均价格,我尝试: In [146]: h

我发现一个非常奇怪的行为(IMHO),一些数据从CSV文件加载到熊猫中。为了保护无辜者,让我们声明
DataFrame
位于变量
homes
中,并且除其他外,具有以下列:

In [143]: homes[['zipcode', 'sqft', 'price']].dtypes
Out[143]:
zipcode     int64
sqft        int64
price       int64
dtype: object
为了得到每个zipcode的平均价格,我尝试:

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
我无法想象为什么某些整数的平均值不能提升为浮动的任何技术原因。更重要的是,只需添加另一列,就可以使价格成为浮动价格 正如我一直期望的那样:

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
为了确保我没有遗漏一些非常明显的东西,我创建了另一个非常简单的
数据帧
df
),但是,通过这个,这种行为没有出现:

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,平均值直接是一个浮点值。已从中读取
主页
数据帧
提供的CSV文件,
df
one已在pandas中创建,写入CSV,然后读取


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

正如你们中的一些人在评论中所建议的,这是pandas中的一个bug。我刚刚报告了这件事

到目前为止,它已经被熊猫队接受


谢谢

您是否得到了不同的结果:
homes.groupby('zipcode')['price'].mean().head(n=5)
?(注意,
price
周围的单括号和双括号。我在[171]中得到了相同的结果:homes.groupby('zipcode')['price'].mean().head(n=5)Out[171]:zipcode 98001 280804 98002 234284 98003 294111 98004 1355927 98005 810164 Name:price,dtype:int64您能发布一些示例数据吗?例如,每个zipcode是否可能只有价格?通常,
pandas
会将平均值计算为float64,但只有在可能的情况下才会转换回int64这样做不会丢失信息。我能找到的最接近的问题是:我不确定这是否相关,但它确实提到了numpy 1.8和1.9中的一些行为,所以如果您还没有将numpy更新到1.9,那么您可以看看这是否有帮助。无论是哪种方式,您都可能希望编辑您的帖子,以提及您的python和numpy版本。只是发布了一个错误连接到熊猫团队。如果它被接受,我将创建一个指向它的答案。