Key Error:3 while using For to plot using matplotlib.pyplot.scatter

Key Error:3 while using For to plot using matplotlib.pyplot.scatter

我有一个包含 10 列的数据集,其中第 4 列和第 8 列是我要绘制的数据,第 9 列用于确定标记类型。

mkr_dict = {'Fluoride': 'D', 'Chloride': 'P', 'Bromide': 'o', 'Iodide' : '^'}
for kind in mkr_dict:
    d = df[df.Halogen==kind]
    plt.scatter(d[3], d[7], 
                s = 20,
                c = 'red',
                marker=mkr_dict[kind])
plt.show()

我在执行时不断收到 Key Error: 3。 有人可以给我建议吗?

如您在以下最小示例中所见,问题中的代码可能 运行 没问题。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

a = np.random.rand(50,8)
df = pd.DataFrame(a)
df["Halogen"] = np.random.choice(['Fluoride','Chloride','Bromide','Iodide'], size=50)


mkr_dict = {'Fluoride': 'D', 'Chloride': 'P', 'Bromide': 'o', 'Iodide' : '^'}
for kind in mkr_dict:
    d = df[df.Halogen==kind]
    plt.scatter(d[3], d[7], 
                s = 20,
                c = 'red',
                marker=mkr_dict[kind])
plt.show()

但是,如果列没有编号,而是有一个名称,则 d[3] 之类的操作将失败。然后,您需要 select 该列的索引

d.iloc[:,3]

或按其名称(在下面的例子中,例如 d.Dd["D"])。使用 iloc 的版本:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

a = np.random.rand(50,8)
df = pd.DataFrame(a, columns=list("ABCDEFGH"))
df["Halogen"] = np.random.choice(['Fluoride','Chloride','Bromide','Iodide'], size=50)


mkr_dict = {'Fluoride': 'D', 'Chloride': 'P', 'Bromide': 'o', 'Iodide' : '^'}
for kind in mkr_dict:
    d = df[df.Halogen==kind]
    plt.scatter(d.iloc[:,3], d.iloc[:,7], 
                s = 20,
                c = 'red',
                marker=mkr_dict[kind])
plt.show()