Seaborn热图未显示从字符串转换为数字的列

问题描述 投票:4回答:1

我有一个12列的pandas数据框。使用seaborn的热图进行绘制时,仅显示9列。其中三个('card','owner','selfemp')丢失了。

heatmap

我用于绘制的代码是:

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

其中“数据”是我的数据框的名称,缺少的三列已使用以下代码从字符串转换为数字:-

data.selfemp[data.selfemp == 'yes'] = 1
data.selfemp[data.selfemp == 'no'] = 0

data.card[data.card == 'yes'] = 1
data.card[data.card == 'no'] = 0

data.owner[data.owner == 'yes'] = 1
data.owner[data.owner == 'no'] = 0

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

请帮助!

python pandas machine-learning heatmap seaborn
1个回答
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()可以正常工作。如果没有它,大熊猫会认为“卡片”列属于“对象”类型,因此在计算相关性时会忽略它。

© www.soinside.com 2019 - 2024. All rights reserved.