如何过滤出包含符号“的所有行

时间:2019-07-08 13:50:37

标签: python pyspark

我想过滤出“ Col1”列中所有包含符号“”的行。

Col1   Col2
11"    A
0!     Q
123456 A
252653 A
343535 A

预期结果:

Col1   Col2
123456 A
252653 A
343535 A

为此,我决定过滤掉所有非数字值:

def is_digit(value):
    if value:
        return value.isdigit()
    else:
        return False

is_digit_udf = udf(lambda value: is_digit(value), BooleanType())

df.filter(when(is_digit_udf(df["Col1"]))).show()

但是此代码失败并显示错误消息:

  

TypeError:when()缺少1个必需的位置参数:“值”

2 个答案:

答案 0 :(得分:1)

when函数与sql中的case when等效。 因此,它不能直接在filter中使用。您可以尝试:

from pyspark.sql.functions import lit
df.filter(is_digit_udf(df["Col1"]))==lit(True)).show()

答案 1 :(得分:-1)

创建提供的输入数据框:

import pandas as pd

Data = {'Col1': ['11"', '0!', '123456', '252653', '343535'], 'Col2': ['A', 'Q', 'A', 'A', 'A']}

df = pd.DataFrame(Data)

要从特定列中删除所需的字符串内容,请使用以下方法:

df.drop(df[df['Col1'].str.contains('"')].index, inplace=True)

其中' Col1 '是所需的列,而''是所需的内容

输出:

Col1   Col2
0!     Q
123456 A
252653 A
343535 A

您要过滤包含吗?

的非数字或字符串