熊猫.corr()返回“ __”

时间:2019-03-19 22:57:17

标签: pandas seaborn heatmap correlation

它一直工作到很好为止,不知道我在做什么错。我将其简化为一个非常简单的数据集:

/listings/<id>

返回“ __”

sns.heatmap(corr)

抛出以下错误“零大小数组到没有身份的约简操作最小值”

我不知道怎么了?我已经尝试了更多行等,并再次检查了我是否没有缺失值……这是怎么回事?之前我有一个非常漂亮的热图,我一直在尝试

2 个答案:

答案 0 :(得分:0)

这里的问题不是数据帧本身,而是数据源。我通过在数据帧中使用drop或iloc找到了相同的问题。关键是数据框具有的全局类型。 假设我们有以下数据框:

list_ex = [[1.1,2.1,3.1,4,5,6,7,8],[1.2,2.2,3.3,4.1,5.5,6,7,8], 
[1.3,2.3,3,4,5,6.2,7,8],[1.4,2.4,3,4,5,6.2,7.3,8.1]]
list_ex_new=pd.DataFrame(list_ex)

您可以毫无问题地计算list_ex_new.corr()。如果通过vars(list_ex_new)检查数据帧的参数,则将获得:

{'_is_copy': None, '_data': BlockManager
 Items: RangeIndex(start=0, stop=8, step=1)
 Axis 1: RangeIndex(start=0, stop=4, step=1)
 FloatBlock: slice(0, 8, 1), 8 x 4, dtype: float64, '_item_cache': {}}

其中dtype为float64。

可以通过list_new_new = list_ex_new.iloc [1:,:]定义新的数据框,并且可以成功评估相关性。数据框属性的检查显示:      {'_is_copy':,      '_data':BlockManager      项目:RangeIndex(开始= 0,停止= 8,步骤= 1)      轴1:RangeIndex(开始= 1,停止= 4,步进= 1)      FloatBlock:slice(0,8,1),8 x 3,dtype:float64,      '_item_cache':{}}

dtype仍为float64。

可以定义第三个数据框:

list_ex_w = [['a','a','a','a','a','a','a','a'],[1.1,2.1,3.1,4,5,6,7,8], 
[1.2,2.2,3.3,4.1,5.5,6,7,8],[1.3,2.3,3,4,5,6.2,7,8], 
[1.4,2.4,3,4,5,6.2,7.3,8.1]]
list_ex_new_w=pd.DataFrame(list_ex_w)

对数据框的相关性进行评估将导致数据框为空,因为list_ex_w属性如下所示:

 {'_is_copy': None, '_data': BlockManager
 Items: RangeIndex(start=0, stop=8, step=1)
 Axis 1: Index(['a', 1, 2, 3, 4], dtype='object')
 ObjectBlock: slice(0, 8, 1), 8 x 5, dtype: object, '_item_cache': {}}

现在dtype是'object',因为数据帧的类型不一致。有弦和漂浮在一起。最后,可以生成第四个数据帧:

 list_new_new_w = list_ex_new_w.iloc[1:,:]

结果将生成相同的笔记本,但没有'a',显然是一个完全正确的数据帧,可以计算相关性。但是,这将再次返回一个空的数据帧。对数据框属性的最终检查显示:

vars(list_new_new_w)

{'_is_copy': None, '_data': BlockManager
 Items: Index([1, 2, 3, 4], dtype='object')
 Axis 1: RangeIndex(start=0, stop=8, step=1)
 ObjectBlock: slice(0, 4, 1), 4 x 8, dtype: object, '_item_cache': {}}

其中dtype仍然是对象,因此corr方法返回一个空的数据帧。 这个问题可以通过使用astype(float)

来解决。
 list_new_new_w.astype(float).corr()

总而言之,似乎在调用corr或cov等方法时,熊猫被称为生成具有相同属性的新数据框,而忽略了新数据框具有一致的全局类型的情况。我一直在检查pandas源代码,并且我理解这是对pandas实现的正确解释。

答案 1 :(得分:0)

如上所述,将类型更改为float。

corr = t.astype('float64').corr()