Seaborn热图未考虑熊猫数据框的所有列进行绘制

时间:2018-07-05 18:57:29

标签: python pandas machine-learning heatmap seaborn

我的pandas数据框有12列,但是seaborn heatmap仅绘制了9列(保留“ card”,“ owner”和“ selfemp”),如下所示:-

image of the correlation heatmap

我使用的代码是:

return Bindings.createDoubleBinding(
                () -> a1.add(aib.add(atb.add(abb))).multiply((h.add(aip.add(atp.add(abp)))).divide(h)).get(),
                a1,aib,aip,atb,atp,abb,abp
        );

其中“数据”是我的数据框的名称,使用以下代码将其遗漏的3列从字符串转换为数字:-

sns.heatmap(data.corr(),xticklabels=True, yticklabels=True)

我希望热图在所有列之间建立关联,因为'卡片'是我的结果属性。

请帮助!

1 个答案:

答案 0 :(得分:0)

您应将card,owner,selfemp列类型设置为int64

更改行的值不足以让熊猫了解此列现在是数字。将这些列转换为数字类型后,pandas的corr()方法就会知道将它们考虑在内。请注意,seaborn的热图与此无关:问题data.corr()所考虑的列。

import pandas as pd
import seaborn as sns
import numpy as np

df = pd.DataFrame({"Year":[2012, 2011, 2013, 2014], "card":["yes", "yes", "no", "yes"], "some_col":[1,0,1,0]})
df.loc[df.card == 'yes', "card"] = 1
df.loc[df.card == 'no', "card"] = 0
df["card"] = df["card"].astype('int64')

此玩具示例演示了如何正确更改列的值以及如何更改列的类型。 还要注意,我使用了df.loc,因为您不想将其分配给副本(这样会警告您)。当然,有更好的方法是使用字典来更改值,但这暂时不相关。

最后一行告诉熊猫,“卡片”列现在为“ int64”类型。有了它,df.corr()可以正常工作。如果没有它,熊猫会认为“卡片”列是“对象”类型,因此在计算相关性时会忽略它。