在数据框中为所有列绘制直方图

17
我试图为数据框中的所有列绘制直方图。 我导入了 pyspark 和 matplotlib。 df 是我的数据框变量。 plt 是 matplotlib.pyplot 变量。
我能够为单个列绘制/绘制直方图,就像这样:
bins, counts = df.select('ColumnName').rdd.flatMap(lambda x: x).histogram(20)
plt.hist(bins[:-1], bins=bins, weights=counts)

但是,当我尝试为所有变量绘制图表时,出现了问题。这是我目前的for循环:

for x in range(0, len(df.columns)):
    bins, counts = df.select(x).rdd.flatMap(lambda x: x).histogram(20)
    plt.hist(bins[:-1], bins=bins, weights=counts)

我该怎么做呢?提前感谢。


我认为你的循环有问题- 请尝试:for x in df.columns:。如果这不起作用,请提供错误消息。 - pault
@Parfait 使用 spark.read.csv("csv 文件", inferSchema=True, header=True) 创建了 df。 - ozzboy
@pault 的循环有误。您能否将其作为答案添加,以便我可以接受? - ozzboy
@Parfait 抱歉,我的意图是让代码保持简洁,并直接指出问题所在。 - ozzboy
2个回答

31

作为 for 循环方法的替代方案,我认为你可以尝试这个:

df.hist(bins=30, figsize=(15, 10))

这将为df DataFrame中的每个数字属性绘制一个直方图。这里,binsfigsize参数仅用于自定义输出。


2
你把Pandas的DataFrames和PySpark的DataFrames混淆了。PySpark的DataFrames没有hist方法。虽然你的回答可能与Pandas有关,但对于PySpark来说并不适用。 - Oliver W.

5
问题在于你的 for 循环:
for x in range(0, len(df.columns)):

将迭代整数范围。然后,当您尝试通过以下方式访问列时:

df.select(x)

您将会因为x不是一个有效的列标识符而出现错误。

相反,请将您的循环改为:

for x in df.columns:

你的其余代码将正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接