Как отфильтровать все строки, содержащие символ - PullRequest
1 голос
/ 08 июля 2019

Я хочу отфильтровать все строки, которые содержат символ "в столбце" 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()

Однако этот код завершается ошибкой с сообщением об ошибке:

Ошибка типа: когда () отсутствует 1 обязательный позиционный аргумент: 'значение'

Ответы [ 2 ]

1 голос
/ 08 июля 2019

when функция эквивалентна case when в sql. Следовательно, он не может быть использован напрямую в filter. Вы можете попробовать это:

from pyspark.sql.functions import lit
df.filter(is_digit_udf(df["Col1"]))==lit(True)).show()
0 голосов
/ 08 июля 2019

Создание предоставленного входного кадра данных:

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

Вы хотите отфильтровать нецифровые или строки, содержащие «

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...