python - 在 Python 中创建直方图
问题描述
我在 Stack Overflow 上找到了一些有用的讨论,但是,我没有使用值列表,而是我想应用直方图的大型数据集中的列列表。我只想快速浏览我的数据。
数据框由 18 列、12330 行组成。我创建了一个列列表,如下所示。我想通过使用在单独的窗口中绘制一个历史(每列一个)的函数来创建一个历史。我面临的问题是实现逻辑来遍历所有列,绘制一个历史。
这是我的 df 的链接:值既是离散的又是连续的,也是字符串(你可以看到前 30 行左右)
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
我的功能只是我在玩弄一些想法。不知道如何遍历每一列并单独绘制,而不是一个图像中的质量。
我需要一些关于如何遍历此列表以应用我选择的图表(在本例中为直方图)的想法。重点主要是前面提到的。
解决方案
您可以直接迭代 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()