【发布时间】:2019-02-11 12:00:28
【问题描述】:
我是 pyspark 的新手。我有一个数组中的列列表,如下所示。
input_vars = [
'column1',
'column2',
'column3',
'column4'
]
现在我想使用数据框执行以下操作。
for var in input_vars:
print(df.var.isNotNull())
但是当我尝试执行上面的代码时出现以下错误
AttributeError: 'DataFrame' object has no attribute 'var'
编辑
我已经按照 'ernest_k' 给出的建议尝试了 df[var].isNotNull() 并且上述错误得到了解决。现在我的实际要求是将下面的 pandas 数据帧代码重写为 pyspark 数据帧。
for var in input_vars:
bindt = df2[df2[var].notnull()][var].quantile([0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1]).unique()
q0 = df2[df2[var].notnull()][var].quantile(0)
q1 = df2[df2[var].notnull()][var].quantile(0.25)
q2 = df2[df2[var].notnull()][var].quantile(0.5)
q3 = df2[df2[var].notnull()][var].quantile(0.75)
q4 = df2[df2[var].notnull()][var].quantile(1)
任何人都可以帮助我如何实现上述要求。提前致谢。
【问题讨论】:
-
你可以使用
df[var] -
@ernest_k - 感谢您的回复。当我尝试 df[var].isNotNull() 我得到像 Column
-
另外,
print(df.var.isNotNull())不行,你这里有什么要求? -
@Valli69 我想这些给你一个列对象。您可能想尝试
df.filter(df[var].isNotNull()).show()来查看过滤后的数据框(但在所有列上循环执行此操作可能很危险,除非您只是在小数据集上进行测试)。 -
@DuyNguyenHoang 其实我的要求是我想计算一个非空列的分位数。在熊猫中,我计算过 df[df[var].notnull()][var].quantile(0.25) 但不确定如何在 pyspark 数据帧中执行
标签: pandas python-2.7 apache-spark pyspark pyspark-sql