Python 键错误:3在使用For时使用matplotlib.pyplot.scatter进行打印

Python 键错误:3在使用For时使用matplotlib.pyplot.scatter进行打印,python,matplotlib,keyerror,Python,Matplotlib,Keyerror,我有一个包含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

我有一个包含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()
执行时,我不断收到关键错误: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]
的操作将失败。然后需要根据其索引选择列

d.iloc[:,3]
或通过其名称(在以下情况下,例如
d.d
d[“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()

正如您在下面的示例中所看到的,问题中的代码可能运行良好

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]
的操作将失败。然后需要根据其索引选择列

d.iloc[:,3]
或通过其名称(在以下情况下,例如
d.d
d[“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()

df[df.Halogen==kind]
将查找一个键True或false我不熟悉编码,我使用了这里的参考:你能解释一下我的代码和参考之间的区别吗?
df[df.Halogen==kind]
将查找一个键True或false我不熟悉编码,我使用了这里的引用:你能解释一下我的代码和引用之间的区别吗?