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

Ram*_*Ram 7 python apache-spark apache-spark-sql pyspark

我正在尝试为数据框中的所有列绘制直方图。我进口pysparkmatplotlib。df 是我的数据框变量。plt 是matplotlib.pyplot可变的

我能够为单个列绘制/绘制直方图,如下所示:

bins, counts = df.select('ColumnName').rdd.flatMap(lambda x: x).histogram(20)
plt.hist(bins[:-1], bins=bins, weights=counts)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试为所有变量绘制它时,我遇到了问题。这是我到目前为止的 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)
Run Code Online (Sandbox Code Playgroud)

我该怎么做?提前致谢。

Far*_*rid 14

作为for循环方法的替代方法,我认为您可以尝试以下方法:

df.hist(bins=30, figsize=(15, 10))
Run Code Online (Sandbox Code Playgroud)

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

  • 您将 Pandas 的 DataFrame 与 PySpark 的 DataFrame 混淆了。PySpark DataFrames 没有“hist”方法。您的答案可能与 Pandas 相关,但不适用于 PySpark。 (2认同)

pau*_*ult 5

问题是你的for循环:

for x in range(0, len(df.columns)):
Run Code Online (Sandbox Code Playgroud)

将迭代一系列整数。然后当您尝试通过以下方式访问该列时:

df.select(x)
Run Code Online (Sandbox Code Playgroud)

您将收到错误,因为x不是有效的列标识符。

相反,将循环更改为:

for x in df.columns:
Run Code Online (Sandbox Code Playgroud)

并且您的其余代码将起作用。