尝试创建条形图时出现KeyError

问题描述 投票:0回答:2

我正在尝试使用以下代码绘制相同的两列的图表:

plt.figure(figsize = (3,3)) 
df["gender", "heart_disease"].plot(kind = "bar")
plt.xlabel("heart_disease") plt.ylabel("gender")

这是运行我之前问题中的代码后的图像,这是抛出错误,正确的代码是什么?this is the data table

这是我遇到的错误this is the error

python matplotlib dataset
2个回答
2
投票

问题是你没有按性别分组:

import pandas as pd
import matplotlib.pyplot as plt

data = {
    'gender': ['Male', 'Female', 'Male', 'Female', 'Male'],
    'heart_disease': [1, 0, 1, 0, 1]
}

df = pd.DataFrame(data)


plt.figure(figsize = (3,3)) 
df.groupby("gender")["heart_disease"].sum().plot(kind="bar")
plt.xlabel("heart_disease") 
plt.ylabel("gender")
plt.show()


2
投票

使用 Pandas 和 Matplotlib



看起来您正确配置了 matplotlib 图形大小和 x/y 标签,但是条形图本身的实际参数似乎是您的代码的问题。因为你的 pandas DataFrame 仅说明特定性别是否患有疾病,所以实际的受试者数量,
Male
Female
未捕获

考虑使用以下方法迭代 df 并计算
Male
Female
主题具有或不具有
heart_disease
的行:

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({
    "gender": [...],
    "heart_disease": [...]
})

x = ["Male", "Female"]
y = [0,0] # Where index 0 is Male and index 1 is Female
for index, row in df.iterrows():
    if row["gender"] == "Male" and row["heart_disease"] == 1:
        y[0] += 1
    if row["gender"] == "Female" and row["heart_disease"] == 1:
        y[1] += 1

plt.bar(x,y, color = "black", edgecolor = "red")
plt.xlabel("X-Axis")
plt.ylabel("Y-Axis")
plt.show()

此方法的文档以及@Mark描述的方法可以在这里找到:

Pandas 行迭代器# 迭代器
Pandas GroupBy #@Mark 的参考

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