【问题标题】:Plotting Histogram for all columns in a Data Frame绘制数据框中所有列的直方图
【发布时间】:2018-04-11 16:45:29
【问题描述】:

我正在尝试为我的数据框中的所有列绘制直方图。 我导入了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)

但是当我尝试为所有变量绘制它时,我遇到了问题。这是我到目前为止的 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:。如果这不起作用,请提供错误消息。
  • @Parfait df 是使用 spark.read.csv("csv file",inferSchema=True,header=True) 创建的
  • @pault 循环错误。您能否将其添加为答案,以便我接受?
  • @Parfait 道歉,我的目的是保持代码干净并直接指出问题所在。

标签: python apache-spark pyspark apache-spark-sql


【解决方案1】:

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

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

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

【讨论】:

  • 您将 Pandas 的 DataFrame 与 PySpark 的 DataFrame 混淆了。 PySpark DataFrames 没有hist 方法。您的回答可能与 Pandas 有关,但不适用于 PySpark。
【解决方案2】:

问题是你的for 循环:

for x in range(0, len(df.columns)):

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

df.select(x)

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

相反,将循环更改为:

for x in df.columns:

你的其余代码都可以工作。

【讨论】:

    猜你喜欢
    • 2019-09-12
    • 1970-01-01
    • 2016-08-26
    • 2020-09-12
    • 2021-05-19
    • 2023-03-08
    • 2021-05-20
    • 2020-02-18
    • 1970-01-01
    相关资源
    最近更新 更多