首页 > 解决方案 > 在 Python 中创建直方图

问题描述

我在 Stack Overflow 上找到了一些有用的讨论,但是,我没有使用值列表,而是我想应用直方图的大型数据集中的列列表。我只想快速浏览我的数据。

数据框由 18 列、12330 行组成。我创建了一个列列表,如下所示。我想通过使用在单独的窗口中绘制一个历史(每列一个)的函数来创建一个历史。我面临的问题是实现逻辑来遍历所有列,绘制一个历史。

这是我的 df 的链接:值既是离散的又是连续的,也是字符串(你可以看到前 30 行左右)

https://ibb.co/PhQ5vsn

import pandas as pd
import matplotlib as plt


df = pd.read_csv("removed file path for sake of space")
columns = df.columns.tolist()

"""data exploration functions for visualising data"""

def histogram ():
    for i in columns: 
        plt.hist(columns)
    return

我的功能只是我在玩弄一些想法。不知道如何遍历每一列并单独绘制,而不是一个图像中的质量。

我需要一些关于如何遍历此列表以应用我选择的图表(在本例中为直方图)的想法。重点主要是前面提到的。

标签: pythonpandaslistmatplotlib

解决方案


您可以直接迭代 DataFrame 对象。

for col in df:
    df[col].plot(kind="hist")

在执行此操作之前,您需要删除文本列。

这是一个完整的示例,以防万一。我将所有直方图绘制在一个图上,但您可以随意更改行为。

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
print(df.head())
df = df.drop("species",axis=1)
print(df.head())
for col in df:
    df[col].plot(kind="hist")
lgd = plt.legend()

这是输出:

   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

   sepal_length  sepal_width  petal_length  petal_width
0           5.1          3.5           1.4          0.2
1           4.9          3.0           1.4          0.2
2           4.7          3.2           1.3          0.2
3           4.6          3.1           1.5          0.2
4           5.0          3.6           1.4          0.2

在此处输入图像描述

要将每一列放在单独的图中,请更改 for 循环,如下所示:

for col in df:
    df[col].plot(kind="hist")
    plt.show()

在此处输入图像描述


推荐阅读