【问题标题】:create dynamic names for pyspark dataframe inside a for loop在 for 循环中为 pyspark 数据帧创建动态名称
【发布时间】:2021-03-05 01:58:45
【问题描述】:

我有一个主数据框 df_PROD,并且在某些年份范围内,我想从主 df 过滤这些记录,如果记录数超过 0,会将它们推送到单独的 df(即 df_PROD_year)并附加那一年变成一个清单,供以后使用。

我正在尝试在 for 循环中为数据框创建动态名称,如下所示,如果记录超过 0,我将添加到单独的 df_year 中,并尝试将该年份附加到另一个列表中,如下所示。

PROD_years_list = []
year=int(datetime.datetime.today().year)
for i in range (year, 2016, -1 ):
  print(i)
  df_PROD_{i} = df_PROD.filter(col("Year") == i)
  if df_PROD_{i}.count() > 0:
    PROD_years_list.append(i)
print(PROD_years_list)

但是我得到了该行的无效语法错误:

df_PROD_{i} = df_PROD.filter(col("Year") == i)

如何在 for 循环中动态命名数据框?谢谢。

【问题讨论】:

    标签: dataframe apache-spark for-loop variables pyspark


    【解决方案1】:

    使用 dict 可能是满足您需求的更好选择。您将每个数据框与相应的年份一起存储为键:

    PROD_years = {}
    year=int(datetime.datetime.today().year)
    
    for i in range (year, 2016, -1 ):
      df = df_PROD.filter(col("Year") == i)
      if df.count() > 0:
        PROD_years[i] = df
    
    print(PROD_years)
    

    【讨论】:

    • 我想可能是我的问题不清楚。我想根据年份动态命名数据框。我的主要数据框是 df_PROD 并且每年,如果记录超过 1,我想将它们分块为单独的数据框。谢谢。我还想将年份收集到一个列表中,以供以后使用。
    • @Lilly 是的,这正是上面代码的作用。 df_PROD_{i} 对应于 PROD_years[i]。您可以稍后使用它,例如:df_PROD_2017 = PROD_years[2017]。这就是我们在 python 中处理动态变量名的一般方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2021-08-27
    • 2018-08-20
    相关资源
    最近更新 更多