我有一个包含 12 列的 pandas 数据框。使用 seaborn 的热图进行绘图时,仅显示 9 列。其中三个 ('card'、'owner'、'selfemp') 丢失了。
我用来绘图的代码是:
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/