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

标签 python pandas machine-learning heatmap seaborn

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

heatmap

我用来绘图的代码是:

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

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

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' 是我的结果属性。

最佳答案

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

更改行的值不足以让 pandas 知道该列现在是数字。将这些列转换为数字类型后,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,因为您不想将其分配给副本(这会像您那样发出警告)。当然,还有一种更好的方法来更改值,即使用字典,但目前它是无关紧要的。

最后一行告诉 pandas “card”列现在是“int64”类型。有了它,df.corr() 就能正常工作。没有它,pandas 认为“card”列是“object”类型,因此在计算相关性时会忽略它。

关于python - Seaborn 热图未显示从字符串转换为数字的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51198184/

相关文章:

Python警告信息输出

python - Pandas Groupby 绘制按顶级分组的多重索引

python - Django 数据库查询优化与模板中的 iterator()

python - 缺少输出,在 Python 中使用 range()

python - "Execution failed on sql"用于使用 pandas.read_sql 和 MSAccess 的特定表名

python - 对多列进行条件选择 - Python

python - 具有阈值的累积销售数据形成具有 bool 值的新系列/列?

machine-learning - 在 AdaBoostClassifier 中使用 scikit-learn 的 MLPClassifier

python - 为什么在斯坦福的 cs231n SVM 中点积倒退?

python - 在不显式保存 session 变量的情况下恢复 TensorFlow 模型