首页 > 解决方案 > pyplot - iloc 在这段代码片段中做了什么

问题描述

是的,我阅读了 pyplot 网站上的文档。不,这仍然没有意义。

下面的代码片段有什么作用?我认为它正在读取数据集的前 100 行,但不确定它对列的作用:

# select setosa and versicolor
    y = df.iloc[0:100, 4].values
    y = np.where(y == 'Iris-setosa', -1, 1)

    # extract sepal length and petal length
    X = df.iloc[0:100, [0, 2]].values

    # plot data
    plt.scatter(X[:50, 0], X[:50, 1],
                color='red', marker='o', label='setosa')
    plt.scatter(X[50:100, 0], X[50:100, 1],
                color='blue', marker='x', label='versicolor')

    plt.xlabel('sepal length [cm]')
    plt.ylabel('petal length [cm]')
    plt.legend(loc='upper left')

标签: pythonpandasmatplotlib

解决方案


该行y = df.iloc[0:100, 4].values占用前 100 行(如您所知)和第 5(索引 4)列。最后.values是将其转换为 numpy 数组,而不是 pandas 系列。

该行X = df.iloc[0:100, [0, 2]].values再次采用前 100 行以及第一和第三(索引 0 和 2)列,并再次将其转换为数组。这个给了我们一个 100x2 的数组,因为我们选择了两列,我认为这就是为什么作者使用大写的变量名,而不是第一步的数组X的小写。y100x1

第三部分,这一行:

plt.scatter(X[:50, 0], X[:50, 1],
                color='red', marker='o', label='setosa')

用 的前 50 行绘制散点图X,其中第一列是水平位置,第二列是垂直位置。下一行:

plt.scatter(X[50:100, 0], X[50:100, 1],
                color='blue', marker='x', label='versicolor')

对 .的下半部分(第 50-100 行)做同样的事情X。如果您正在运行此代码并且没有发生任何事情,请尝试plt.show()在最后添加。


推荐阅读