PySpark:如何删除 DataFrame 中的非数字列?

Posted

技术标签:

【中文标题】PySpark:如何删除 DataFrame 中的非数字列?【英文标题】:PySpark: How to drop non-numeric columnsfr a DataFrame? 【发布时间】:2020-03-11 21:16:52 【问题描述】:

我想从 DataFrame 中删除所有非数字的列。我正在尝试复制一些这样做的 Pandas 代码:

df = df[df.select_dtypes(exclude=['object']).columns]

我将如何为 PySpark DataFrame 执行此操作?

【问题讨论】:

【参考方案1】:

首先,请找到here 不同 PySpark 类型的参考。

下面的代码删除了字符串 cols:

df = spark.createDataFrame([
    (1, "a", "xxx", None, "abc", "xyz","fgh"), 
    (2, "b", None, 3, "abc", "xyz","fgh"),
    (3, "c", "a23", None, None, "xyz","fgh")
], ("ID","flag", "col1", "col2", "col3", "col4", "col5"))

from pyspark.sql.types import *
num_cols = [f.name for f in df.schema.fields if not isinstance(f.dataType, StringType)]

df2 = df.select([c for c in num_cols])
df2.show()

+---+----+
| ID|col2|
+---+----+
|  1|null|
|  2|   3|
|  3|null|
+---+----+

或者(准确地说)您可以将not isinstance 替换为isinstance,并包含您感兴趣的上述链接中的类型。 希望这会有所帮助。

【讨论】:

以上是关于PySpark:如何删除 DataFrame 中的非数字列?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PySpark Dataframe 中删除重复项并将剩余列值更改为 null

如何在多列上旋转 PySpark 中的 DataFrame?

如何根据pyspark中的条件组合dataFrame中的行

在 PySpark 中,如何根据另一个 DataFrame 中的查找来填充新列?

检查 Pyspark Dataframe 中的重复项

使用 PySpark 删除 Dataframe 的嵌套列